fbpx
13 stycznia 2022 Czas czytania: 3 min

Liczby losowe, a Perlin Noise

Piotr Białas

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:

Więcej inspirującej wiedzy

Siedziba

Konarskiego 18C
44-100 Gliwice

Skontaktuj się z nami

 

NIP: 6312680249
+48 725 733 380

Polityka prywatności
© Copyright 2021 by appvinio.