Visuel Matematik - Fraktaler

Naturlige fraktaler - 3D bjerge


Bjerge i Sinaiørkenen
I naturen kan man se mange fraktallignende objekter. F.eks. skyer, bjerge, bølger, skove og bregner. Her vil vi se på hvordan man kan skabe "kunstige" naturlige objekter vha. fraktaler.

Lad os se på hvordan man kan lave bjerglignende fraktaler. Dette vil vi gøre ved at følge metoder fra bogen "The Science of FRACTAL IMAGES" se [Peitgen 1988].

En af metoderne der anvendes er Midpointdisplacement, som kan oversættes til midtpunktsforskydning.

Ideen er at starte med en ret linie gående fra begyndelsespunktet [x1,y1] til slutpunktet [x2,y2]. Vi forskyder så midpunktet mellem disse til punktet [x3,y3] = [(x2-x1)/2,(y2-y1)+δ], hvor δ er midtpunktsforskydningen. Vi vil lige om lidt komme ind på hvordan δ findes.

Vi har nu en stykkevis lineær kurve, som starter i punktet [x1,y1], som knækker i punktet [x3,y3] og som ender i [x2,y2]. Vi kan så tage fat i de to rette linier gående fra hhv. [x1,y1] til [x3,y3] og fra [x3,y3] til [x2,y2] og udføre den samme operation. Dette vil så give en ny stykkevis lineær kurve bestående af 4 begrænsede rette linier.

Hvis vi itererer denne proces, vil vi ende med en fraktal kurve. Kurver af denne type kan ses af fig. 1 og fig. 2 nedenfor. I figurerne er hvert andet trin sprunget over.


Fig. 1


Fig. 2

Midtpunktsforskydningen δ skal vælges, så den bliver mindre og mindre for hvert skridt. Hvis vi kalder midtpunktsforskydningen i det n'te skridt for δn så kan man opnå dette ved at sætte δn = δn-1*0.50.5*H, hvor H er en parameter vi lige om lidt vil komme nærmere ind på.

Udover at gøre skridtene mindre og mindre vil man også gerne have, at de har et lidt mindre regelmæssigt udseende. Dette opnås så ved at indføre en funktion, som kan give tilfældige værdier mellem -∞ og ∞. Sådanne funktioner er ofte noget man kalder gaussisk fordelte eller normalfordelte, hvilket bl.a. betyder, at funktionen oftere vil give værdier tæt på 0 end værdier væk fra 0. Sådanne funktioner har også noget man kalder varians, som fortæller hvor langt væk fra 0 værdierne fra funktionen typisk vil være. Hvis en funktion er gaussisk fordelt vil variansen have værdien 1 (og normalfordelingen siges at være standard normalfordelt), hvilket betyder, at i gennemsnit vil ca. to trediedele af værdierne fra funktionen falde indenfor 1 og -1. Hvis man skulle vise fordelingen af værdier funktionen returnerer ved f.eks. 10000 forsøg, vil fordelingen have en klokkeform, med top i 0. Vi vil kalde denne funktion for gauss().

Ved at benytte en gaussisk fordelt tilfældighedsfunktion gauss() kan vi opnå at skridtene bliver mindre regelmæssige ved at sætte vores midtpunktsforskydning i n'te skridt til Δn, hvor Δn = δn * gauss().

Hvis man vil generalisere dette til to dimensioner kan man gøre dette ved at starte med afgrænset kvadratisk del af (x,y)-planen. Find midtpunktet mellem hjørnerne og forskyd dette med Δ0. De 5 punkter bestående af hjørnerne sammen med midtpunktet giver udgangspunktet for vores iteration. Hvert hjørne sammen med midtpunktet udgør nu to af hjørnerne i 4 nye kvadrater. Forskyd hvert af hjørnerne i et sådant kvadrat samt midtpunktet med 5 forskellige værdier af Δ1 (dvs. hvor gauss() har givet 5 forskellige værdier - man kunne kalde disse for Δ1A, Δ1B, Δ1C, Δ1D og Δ1E). Tilsvarende gør man med de 4 andre kvadrater (hvor der igen benyttes andre værdier af Δ1).

Sådan fortsætter man indtil man har forskudt et tilstrækkeligt antal punkter. Der er mange måder at gøre dette på og nogle forskellige metoder er nævnt i bogen "The Science of FRACTAL IMAGES" se [Peitgen 1988]. I bogen er også beskrevet hvordan man kan rendere figuren man ender med. Et eksempel på dette kan ses nedenfor, hvor jeg har lavet en lille animation hvor man bevæger sig hen over et bjerglandskab lavet med en afart af ovenstående metode.


vinkel: 0