Liczby losowe, a Perlin Noise

Czym są liczby losowe?

W programowaniu nie ma tak naprawdę liczb w pełni losowych, są liczby pseudolosowe, które są trudne do odróżnienia od prawdziwych liczb losowych (ale dla uproszczenia nazywa się je losowymi). Takie liczby są najczęściej generowane na podstawie jakiegoś ciągu znaków tzw. seed.

Spróbujemy sobie zobrazować jak wyglądają liczby losowe i ich zależność między poprzednią, a następną. Wylosujemy sobie 10 liczb z zakresu 1 do 100 włącznie:

1. 14
2. 72
3. 94
4. 28
5. 100
6. 81
7. 35
8. 21
9. 89
10. 51

Żeby lepiej zrozumieć jak bardzo rozrzucone one są po całym zakresie proponuje przedstawić je za pomocą wykresu, gdzie oś X to kolejne losowania, a oś Y to wartości tych losowań. Losowane było 200 liczb z zakresu od 0 do 400:

Jak widać, wartości są chaotycznie porozrzucane po całym zakresie liczbowym i każda poprzednia wartość nie jest powiązana w żaden sposób z kolejną.

Liczby losowe nie zawsze wystarczają

Czasami zdarza się sytuacja w której chcemy mieć zjawisko losowości, ale bardziej poukładanej, płynnej. Dobry przykładem jest algorytm do tworzenia terenu w Minecraft’cie. Każdy nowy świat jest tworzony losowo (za pomocą seedu), ale w sposób, w którym można łatwo wyróżnić łąki, góry, oceany, itp. W takim przypadku zwykłe liczby losowe nie dadzą rady i potrzebujemy pomocy szumu Perlina.

Perlin Noise – co to?

Szum Perlina (eng. Perlin Noise), to algorytm, który na podstawie seedu tworzy nam losowy ciąg liczb, który jest “płynny”. Co to oznacza? Każda poprzednia liczba jest w bliskim zakresie kolejnej liczby. Dzięki czemu znikam chaos. Najlepiej zobrazuje wam to poniższa grafika:

Każda kropka jest losowo tworzona i podając inny seed będziemy widzieli inny wykres za każdym razem. Co więcej, algorytm pozwala nam na różne operacje na tych pseudo losowych liczbach. Możemy wypłaszczyć lub wyostrzyć, zwęzić lub rozszerzyć ten wykres, dzięki czemu możemy otrzymać bardziej górzysty lub płaski wynik. Dodatkowo Perlin Noise pozwala nam na tworzenie multiwymiarowych wykresów. Poniżej widać różnicę pomiędzy zwykłymi liczbami losowymi, a liczbami wygenerowanymi przez Perlin Noise. Każdy piksel miał losową wartość pomiędzy 0, a 255, która wyznaczała jego kolor.

Losowe liczby
Losowe liczby
Perlin Noise
Perlin Noise

W algorytmie tworzenia terenu moglibyśmy przyjąć ciemniejsze piksele za górzysty teren, a bielsze za równiny lub oceany.

W jaki sposób można wykorzystać to w aplikacji mobilnej?

Jedna z prostszych rzeczy, to splash screen lub jakieś tło, które będzie się poruszało, a chcemy, żeby nie była to powtarzalna animacja. Poniższy przykład po paru modyfikacjach i zmianie koloru mógłby za takie tło posłużyć:

Po dodaniu odpowiednich kolorów:

This site is registered on wpml.org as a development site.