GENEROWANIE MAPY ZA POMOCĄ SZUMU PERLINA I UŁAMKOWEGO RUCHU BROWNA
(stylów tutaj nie ma lub nie widzę, więc nagłówek piszę z Caps Lockiem.)
Jeśli chcemy wygenerować (pseudo)losową mapę jakiegoś terenu (np. do gry), ciekawym sposobem jest użycie szumu Perlina i ułamkowego ruchu Browna.
Podstawowymi argumentami generatora będą:
Użycie tego samego seeda gwarantuje uzyskiwanie po kolei tych samych wyników losować. Jeśli wygenerujemy dwie mapy o tych samych wymiarach i poziomie głębokości, i tak będą się mocno różniły dzięki seedowi. Powtórzenie wszystkich trzech wartości spowoduje wygenerowanie identycznych map.
Generowanie szumu Perlina przebiega następująco:
Następnie, ustalając wartości dla każdego koloru: kolor biały = 1.0, kolor czarny = 0.0, wszystkie odcienie szarego w przedziale (0.0;1.0).
Teraz wykonujemy ułamkowy ruch Browna. Tworzymy kolejny obraz o wymiarach AxB. Każdy piksel w tym obrazie będzie miał przyporządkowaną własną wartość z przedziału od 0.0 do 1.0, będącą sumą wartości pikseli o tym samym położeniu w obrazach wygenerowanych przez szum Perlina. Każdy piksel z wygenerowanych obrazów ma swoją wagę, równą 1/(2*(G-M+1)).
Przykład:
Użyliśmy głębokości szumu G=3, wygenerowaliśmy więc 3 obrazy. Piksel znajdujący się w punkcie (0;0) ma dla każdego z czterech obrazów wartości:
Dla M=1 - 0.0
Dla M=2 - 1.0
Dla M=3 - 0.7
Pamiętając o tym, że waga dla każdego poziomu M jest równa 1/(2*(G-M+1)), waga dla M=3 jest równa 0.5, dla M=2 - 0.25, dla M=1 - 0.125
Tworząc więc obraz z ułamkowym ruchem Browna, w punkcie (0;0) wstawimy kolor:
0.0 * 0.125 + 1.0 * 0.25 + 0.7 * 0.5 = 0.0 + 0.25 + 0.35 = 0.6
Skoro więc przyjęliśmy skalę, według której 1.0 to kolor biały a 0.0 to kolor czarny, wartość 0.6 to trochę przyciemniony kolor szary.
W ten sposób należy wyliczyć wartość dla każdego piksela. Patrząc się na efekt końcowy, można zauważyć, że obraz najbardziej przypomina ostatni wygenerowany szumem Perlina obraz (który posiadał największą wagę).
Po wygenerowaniu dwóch obrazów o tych samych rozmiarach, możemy zacząć dzielić świat na biomy. Możemy uznać, że jeden z tych obrazów oznacza temperaturę (im jaśniej, tym cieplej), a drugi wysokość (im jaśniej, tym wyżej). Możemy wtedy utworzyć gotową mapę, korzystając z ustalonych przez siebie zasad, np.:
Woda - mała wysokość, temperatura średnia lub wysoka
Lód - mała wysokość, temperatura niska
Pustynia lodowa - średnia lub duża wysokość, niska temperatura
Pustynia - średnia wysokość, wysoka temperatura
Łąki - pozostałe miejsca
A na koniec opis załączników, czyli obrazki JPG po kolei z galerii http://imgur.com/a/Oni08#0
#wtf http://i.imgur.com/DKk4rBU.png
Wartość była zbyt niska nawet jak na Newbie... bo w ogóle jej nie było...
@Adam Boduch pojawi się jeszcze w najbliższym czasie możliwość zdobycia kubka za ciekawy wpis?
@madmike: Cześć madmike. Miło widzieć Twoje słowa od razu po jednym kliknięciu. Po to zbieram właśnie absurdalne dowody. Po to robię nawet absurdalne martrce [(1-0) XOR (0-1)]:{Algebra bez cyfry 0 z operatorem symetrycznym XOR, który potrzebuje tylko cyfry jeden 1=TRUE, żeby stworzyć SYSTEM FUNKCJONALNIE PEŁNY W ALGEBRZE BOOLE'A, ale co do zera=0 do dziś nie mam pewności, bo zostawiam pytanie chociaż dla Ciebie=madmike} i zapisuję tylko dwa bakcupy, oba na różnych dyskach, z czego jeden jest WD serwerwerowy u mnie w domu, likwiduję wszelkie inne rzeczy z mojego Pulpitu na Windows 7 64-bit, wyłączam wszystkie kable i serwerowy UPS, wybrany przez wytrawnego eksperta od serwerów Windows i Linux, który ma już własne sieci osiedlowe LAN. STOP. facebook może poczekać, bo na razie mam słuszne polecenie i wiem, kto ma oryginał wszystkiego, co jest potrzebne. STOP. Nawet nie wiem kiedy mi wyłączą zasilanie, po to mam 20 minut podtrzymania zasilania, po to piszę artykuły. To nikogo nie obchodzi. @Adam Boduch może potrzebuje odpoczynku, może śledzi kursy akcji. STOP. UFAM ADAMOWI i wiem dlaczego. Zostawiam Tobie @madmike i Tobie @Adam Boduch WYSŁAĆ.
Porada na przyszłość: Jeżeli nie wiesz, co oznacza jakiś argument funkcji, czytasz d...
return (1/3)*(result(x-1)+result(x-2))
Bez Javascriptu tego raczej nie osiągniesz. Spróbuj ogarnąć podstawy jQuery oraz med...
Sprzęt: Lenovo B50-80, według DXDIAG (odpalonego na Windowsie na oddzielnej partycji...
Ultimate Quine. Niby ma to trochę, ale może ktoś nie widział tego wcześniej (np. ja)...
Ultimate Quine. Niby ma to trochę, ale może ktoś nie widział tego wcześniej (np. ja)...
(będzie potrzebowało potwierdzenia bardziej doświadczonej osoby) Klasa może mieć tyl...
Spostrzeżenia po jednej z lekcji w technikum: Zastanawiam się, po co (w większości p...
Spostrzeżenia po jednej z lekcji w technikum: Zastanawiam się, po co (w większości p...
#offtopic #humor #wspomnienia z #technikum nie wiem, po co to piszę, ale może ktoś s...
@ShookTea: Dobre, ale do tego bardziej artykuły pasują (tylko że za artykuły kubków nie dają :( ) - właśnie przez to formatowanie.