Fraktale
DefinicjaFraktal
Fraktal (łac. fractus złamany, cząstkowy, ułamkowy) w znaczeniu potocznym oznacza zwykle obiekt samo-podobny (tzn. taki, którego części są podobne do całości).
Fraktal ma względnie prostą definicję rekurencyjną.
Jeden z najprostszych fraktali.
Konstrukcja tego zbioru była podana przez polskiego matematyka Wacława Sierpińskiego w 1915.
Trójkąt Sierpińskiego otrzymuje się następująco: w trójkącie równobocznym łączy się środki boków, dzieląc go w ten sposób na cztery mniejsze trójkąty. Trójkąt środkowy usuwa się, a wobec trzech pozostałych trójkątów operację się powtarza, dzieląc każdy z nich na cztery mniejsze trójkąty, usuwając środkowy, a wobec pozostałych czynności się powtarzają. Punkty pozostające po nieskończenie wielu powtórzeniach tej operacji tworzą trójkąt Sierpińskiego.
Źródło:
http://pl.wikipedia.org/wiki/Tr%C3%B3jk%C4%85t_Sierpi%C5%84skiego
oto trojkat.sierpinskiego :n :bok
skieruj 30 sierpinski :n :bok
już
oto sierpinski :n :bok
jeśli :n = 0 [trojkat :bok stop]
ukm "czerwony
trojkat :bok
ukm "czarny
sierpinski :n - 1 :bok / 2 np :bok / 2
sierpinski :n - 1 :bok / 2 pw 60 np :bok / 2 pw 60
sierpinski :n - 1 :bok / 2 lw 60 ws :bok / 2 lw 60 ws :bok / 2
już
oto trojkat :bok
wielokąt [powtórz 3 [np :bok pw 120]]
już
Dywan Sierpińskiego to fraktal otrzymany z kwadratu za pomocą podzielenia go na dziewięć (3x3) mniejszych kwadratów, usunięcia środkowego kwadratu i ponownego rekurencyjnego zastosowania tej samej procedury do każdego z pozostałych ośmiu kwadratów.
oto dywanSierpinskiego :n :bok
jeśli :n = 0 [kwadrat :bok stop]
ukm "żółty
kwadrat :bok
ukm "czerwony
powtórz 4 [
powtórz 2 [dywanSierpinskiego :n - 1 :bok / 3 np :bok / 3]
np :bok / 3
pw 90
]
już
oto kwadrat :bok
wielokąt [4 [:bok 90]]
już
Procedura wywołana z parametrem :n wynoszącym 4
? dywanSierpinskiego 4 480
Dywan Sierpińskiego
Krzywa Kocha powstaje z odcinka, poprzez podzielenie go na 3 części i zastąpienie środkowej ząbkiem (o ramieniu długości równej 1/3 odcinka) takim, że wraz z usuwaną częścią tworzy trójkąt równoboczny. Krok ten jest powtarzany w nieskończoność dla każdego fragmentu odcinka.
Krok 0
Krzywa Kocha w kroku zerowym (k=0) jest odcinkiem. Zostanie on podzielony na 3 równe części, a środkową zastąpią dwa odcinki długości 1/3 l, nachylone względem niej pod kątem 60°. Wraz z wyciętym fragmentem mogłyby one utworzyć trójkąt równoboczny.
Krok 1
Krzywa Kocha w kroku pierwszym (k=1), po transformacji zawiera 4 odcinki, każdy równy 1/3 l. W kolejnym kroku każdy z tych odcinków ponownie zostanie podzielona 3 części, a środkową znów zastąpimy dwoma odcinkami.
Krok 2
Krzywa Kocha w kroku drugim (k=2) zawiera już 16 odcinków, każdy długości 1/9 l. W kolejnym kroku (k=3) powstanie 64 odcinków, każdy długości 1/27 l itd.
koch
ze stopniami odpowiednio: 0 1 2 3 4.
Procedura tworząca krzywą Kocha wygląda następująco:
oto koch :stopień :długość
jeśli :stopień = 0 [np :długość stop]
koch :stopień - 1 :długość / 3
pw 60
koch :stopień - 1 :długość / 3
lw 120
koch :stopień - 1 :długość / 3
pw 60 koch :stopień - 1 :długość / 3
już
Połączenie trzech krzywych przypomina płatek śniegu i nazywane jest płatkiem Kocha (na rysunku poniżej).
oto koch.płatek :bok
ukp "czarny
pw 30
powtórz 3 [koch 3 :bok pw 120]
lw 30
pod pw 30 np :bok / 2 ukm "biały zamaluj ws :bok / 2 lw 30 opu
już
Płatki śniegu
krok 0
rysujesz sześcian
krok 1
rysujesz sześć mniejszych sześcianów na początku każdego boku
krok 2
rysujesz sześcian na boku każdego z małych sześcianów
oto fraktal1 :poziom :bok
jeśli :poziom = 0 [stop]
powtórz 6 [np :bok
fraktal1 :poziom - 1 :bok / 2 pw 60]
już
? fraktal1 3 80
Binarne oznacza dwójkowe, nazwano je tak gdyż z każdego rozgałęzienia wyrastają dwie podobne gałęzie.
Drzewo binarne charakteryzuje jego stopień - liczba poziomów oraz wielkość. Popatrzmy na drzewo stopnia 3.
Pień - to drzewo stopnia 1, z niego wyrastają dwie gałęzie - obie to drzewa stopnia 2. Gałęzie te wyrastają pod kątem 45 stopni i obie mają długość równą 0.7 długości pnia. Podzielmy konstrukcję drzewa na elementy podstawowe i drzewa niższego stopnia. Elementem podstawowym jest pień o pewnej długości, dalej mamy identyczne dwa drzewa niższego stopnia i o wielkości 0.7 mniejszej niż drzewo pierwotne. Jedno z drzew niższego stopnia jest odchylone od pnia w lewo o 45 stopni. Drugie z nich zaś jest odchylone o 90 stopni w prawo od pierwszego.
Spróbujmy zapisać plan procedury DRZEWO z parametrami nazwa żółwia stopień i wielkość:
przejście naprzód o wielkość pnia
sprawdzenie warunku: czy stopień wynosi 0
jeśli tak, to zakończenie procedury
jeśli nie, to:
skręt w lewo o 45 stopni
utworzenie nowego żółwia o kierunku w prawo 90 w stosunku do kierunku wyjściowego (lewo 45)
wywołanie procedury DRZEWO z parametrami stopień-1 i wielkość*0.7)
długość kto
– w wyniku wywołania której za każdym razem otrzymujemy aktualną liczbę zółwi na stronie.
oto starter
cs
ustalKolTła "jasnoniebieski
usuńObiekt wszystkie
nowy "żółw [nazwa 0]
słuchaj 0
sklej
sż
pod ws 160 opu
drzewo 1 6 100
słuchaj wszystkie ustalpostać "|$\kwiat| pż
(ps [liczba wszystkich żółwi:] długość wszystkie)
czekaj 5000
starter
już
oto drzewo :lż :n :pień
czekaj 200
ukp 2 ugp 2 * :n + 1
np :pień
jeśli :n = 0 [stop]
lw 45
każdy [nowy "żółw [nazwa (:lż + kto) poz (poz) kierunek (kierunek + 90) widoczny fałsz]]
słuchaj wszystkie
drzewo długość wszystkie :n - 1 0.7 * :pień
już
Drzewko
Na koniec ciekawy motyw roślinny.
Fraktale naprawdę są wśród nas.
Procedura rysowania liścia paproci pokazanego po prawej.
Wywołanie np.:
? paproć 500
oto paproć :a
ukp 2
jeśli :a < 1 [np :a ws :a stop]
np :a * 0.1 lw 40
paproć :a * 0.2 pw 80
paproć :a * 0.2 lw 40
pw 2 paproć :a * 0.9 lw 2
ws :a * 0.1
ukp 0
już