W poprzedniej notce „Zróbmy sobie fraktala” pokazałem jak aplikacja do transformacji afinicznych może generować trójkąt i dywan Sierpińskiego. Każdy kto skorzystał z mojej aplikacji mógł się przekonać, że niezależnie jaki obraz został użyty jako medium do generowania fraktala to efekt końcowy takich przekształceń zawsze był jednakowy (po odpowiednio dużej liczbie przekształceń). Jednak metoda przekształceń afinicznych nie jest efektywna ponieważ przekształca całe obiekty. A to oznacza, że każdy piksel obrazu początkowego podlega każdemu przekształceniu. Uciążliwość tę widać szczególnie dla dywanu Sierpińskiego, gdzie takich przekształceń jest aż osiem.
Do celów prezentacji graficznej fraktali opartych o przekształcenia afiniczne bardzo dobre efekty daje technika gry w chaos. Do tej notki jest aplikacja pozwalająca samodzielnie generować aż dziewięć rodzajów fraktali. Program jest projektem typu open source i znajduje się tutaj.
Jak to działa? Bardzo prosto. W skrócie przestawię to dla trójkąta Sierpińskiego.
Z każdym z trzech przekształceń tworzących trójkąt Sierpińskiego kojarzymy prawdopodobieństwo wylosowania go do użycia w transformacji. Suma wszystkich prawdopodobieństw musi być równa 1.
W przypadku trójkąta Sierpińskiego wszystkie prawdopodobieństwa są równe i są równe 1/3. Co oznacza, że każda transformacja może być wylosowana z jednakowym prawdopodobieństwem. Taki układ losowania nazywa się symetryczną kostką do gry. W praktyce możemy na połączyć na zwykłej kostce do gry liczby w następujący sposób:
- jeżeli wypadnie I lub VI to do użycia wylosowana zostaje pierwsza transformacja (zdarzenie A)
- jeżeli wypadnie II lub V to do użycia wylosowana zostaje druga transformacja (zdarzenie B)
- jeżeli wypadnie III lub IV to do użycia wylosowana zostaje trzecia transformacja (zdarzenie C)
Ponieważ kostka jest z definicji symetryczna a pary liczb leżą na przeciwnych krańcach kostki to o takim losowaniu można powiedzieć, że wylosowanie każdej z transformacji jest jednakowo prawdopodobne czyli wynosi 1/3, czyli tak jak oczekujemy. W moim programie rolę kostki do gry pełni generator liczb losowych.
I teraz przystępujemy do generowania trójkąta Sierpińskiego (w programie jest to opcja „Game I”).
Losujemy punkt początkowy (w moim programie jest punkt oznaczony czerwonym pikselem powstający po naciśnięciu klawisza „1”).
Naciskamy kolejno klawisze „100”, „1000”, „10000” i „100000” oznaczające ilość rzutów kostką a tym samym ilość wykonanych losowo przekształceń. Zobaczmy jak to wygląda w programie.
„100” (jeszcze niewiele widać):
„1000” (już pojawiają się zarysy trójkąta):
„10000” (prawie już, już):
„100000” (sukces):
Każde z losowań powoduje wygenerowani nowego punktu na wskutek zastosowania do współrzędnych poprzedniego punktu wylosowanej transformacji.
Można oczywiście pominąć kroki pośrednie i od razu przejść do generowania dziesiątek tysięcy losowań poprzez kolejne naciskania na klawisz „100000”. Już naciśnięcie dwukrotne klawisza „10000” daje dużo lepsze efekty wizualne niż generowanie poprzez przekształcanie obrazów jakie zaprezentowałem we wspomnianej powyżej notce. Nie mówiąc już o szybkość generowania, która ma się jak około 1:10 na korzyść gry w chaos.
No teraz można sobie postawić pytanie. A co będzie jeżeli kostka do gry będzie niesymetryczna? Czy inaczej mówiąc będzie fałszywa? Wtedy prawdopodobieństwa losowań poszczególnych transformacji będą różne. W programie jest to opcja „Game II”. W programie przyjąłem , że te prawdopodobieństwa różnią od siebie znacznie i wynoszą odpowiednio: 0.1, 03 i 0.6. I wtedy pomimo wielokrotnego naciskania na klawisz „100000” ciągle otrzymujemy „przydymiony” trójkąt Sierpińskiego.
Cały czas mówimy tu o jakichś prawdopodobieństwach, losowaniach, transformacjach. A czy można to wykorzystać praktycznie? Wyobraźmy sobie, że byliśmy w kasynie i „gwizdnęliśmy” stamtąd jedną kostkę do gry. I budujemy sobie automat do rzucania taką kostka i do rejestrowania wyników tego rzucania. Wyniki takich losowań (opisane powyżej zdarzenia A, B lub C) dołączamy do naszego programu. Jeżeli po ponad 100000 rzutów nasz trójkąt jest przydymiony to mamy pewność, że z szulerami będzie trudno wygrać. A najlepiej trzymać się od nich z daleka.
W następnej notce z cyklu fraktalnego pokażę, że fałszywa kostka do gry może być pożyteczna również do efektywnego generowania bardzo ładnych struktur fraktalnych.


Komentarze
Pokaż komentarze (11)