Presentatie titel Rotterdam, 00 januari 2007 Computer Graphics Technische Informatica
Les 6 Les 6 gaat over Fractals
Inleiding fractal Vele objecten zijn niet vloeiend, maar hebben onregelmatige of gefragmenteerde vormen Zulke objecten kunnen getekend worden met Fractal meetkunde die is ontwikkeld door Mandelbrot ( ) benoit-mandelbrot-is-overleden.htmlhttp://tweakers.net/nieuws/70259/wiskundige- benoit-mandelbrot-is-overleden.html Fractals worden beschreven als meetkundige figuren, die niet met Euclidische meetkunde kan worden gepresenteerd Een fractal kromme kan niet 1-dimensionaal worden gepresenteerd
Inleiding fractal En een fractaal oppervlakte is niet 2 dimensionaal Fractale vormen hebben een fractale dimensie (1/2,1/4,1/8… enz) Vloeiende krommen zijn 1 dimensionale objecten met lengte gedefinieerd tussen 2 punten Een fractale kromme bevat oneindige details op ieder punt van de kromme De lengte is niet te bepalen Steeds als we inzoomen in de details wordt de lengte groter en groter (zie fig 10-24)
Inleiding fractal Krommen in een 2-dimensionaal systeem worden beschreven met fractale dimensies tussen 1 en 2
Regelmatige fractal Een fractale kromme wordt gegenereerd door herhaaldelijk een specifieke transformatie-functie toe te passen op punten binnen een gebied Het aantal details hangt af van : 1.aantal iteraties 2.resolutie van display Als P 0 =(x,y) een beginpunt is danwordt de transformatie: P 1 = F(P 0 ) P 2 = F(P 1 ) P 3 = F(P 2 ) … enz De transformatiefunctie wordt verschillend gespecificeerd om regelmatige of willekeurige variaties te verkrijgen.
Regelmatige fractal Zie fig voor een regelmatige fractal
Regelmatige fractal We beginnen met een kromme met 2 lijnsegmenten Als eerste wordt het patroon van de orginele kromme met een factor 1/3 gereduceerd Dit gereduceerd patroon vervangt het middelste gedeelte (1/3) van de orginele kromme
Regelmatige fractal Hierna wordt het patroon weer met1/3 gereduceerd, enz..
Regelmatige fractal Bij iedere stap wordt het aantal lijnen vergroot met een factor 4 16, 64,,256,… De lengte van iedere segment is 1/3 van de voorgaande De totale lengte (uitgaande van 1) wordt met een factor 4/3 vergroot per stap (zie fig 10-26)
Dimensie fractal Afleiding fractale dimensie Als je start met lengte 1 en verdeelt deze met een factor S (verschalingsfactor) De lijn bestaat dan uit 1/S verdeelde copieen Het aantal copieen (onderverdelingen) is N De dimensie is D Als D=1 en S=1/4 zijn er 4 copieen met lengte 1/4 (zie fig 10.27a) In formule: 1=S 1.N Bij een vierkant is dimensie D=2 Als D=2 en S=1/4 zijn er 16 copieen met lengte 1/4 (zie fig 10.27b) In formule: 1=S 2.N Algemeen 1=S D.N
Dimensie fractal
Dimensie fractal Uitgaande van 1=S D.N kan deze omgewerkt worden naar: In het voorbeeld is N=4 en S= 1/3 (fig 10-25) Hieruit volgt:
Complexe functietheorie Veel fractal krommen worden gegenereerd met functies in het complexe vlak D.w.z. ieder 2 dimensionaal punt wordt gepresenteerd als de complexe uitdrukking Een complexe functie wordt dan gebruikt om punten herhaaldelijk af te beelden van 1 positie naar een andere positie Vb. f(z) = 5+z = 5 + x+iy = x’+y’i x’= 5+x y’=y hieruit oplossen y’=f(x’) y’=x’-5 y=x
Complexe functietheorie Dit is de afbeelding van f(z) in het complexe vlak Het kan zijn dat de afbeelding een punt geeft in het oneindige of op nul of op een kromme Een voorbeeld hiervan is f(z)=z 2 met z=x+iy f(z) = x’+y’i
Complexe functietheorie f(z)=(x+iy) 2 = x 2 +2xyi +i 2 y 2 = x 2 -y 2 +2xyi x’= x 2 -y 2 y’=2xy Het verband tussen x’en y’ moet nog door een 3 e voorwaarde gegeven worden Als de deze voorwaarde is |z| =1 volgt: |z| = 1 dus: x’= x 2 -y 2 y’=2xy hieruit volgt: x’ 2 +y’ 2 =1
Complexe functietheorie Dit is als |z|=1 Evenzo volgt als |z|=2 x’ 2 +y’ 2 =2 2 =4 z’=|1| x’ y’ z=|1| y x
Complexe functietheorie Het blijkt dat bij doorlopen van punten, waarbij |z|=1 de afbeelding een cirkel is met |z’|=1 Doet men nog een transformatie dan wordt |z”|=1 eveneens 1… enz Men blijft na transformatie steeds op de cirkel z=|2| y x z’=|4| x’ y’
Complexe functietheorie Wel worden de punten steeds anders geplaatst Immers z kan ook anders geschreven worden: z =|z|e iα z 2 =|z| 2 e i2α Nu is z’ =|z’|e iβ Hieruit volgt: |z’|=|z| 2 arg(z’) =β =2α =2 arg(z) Kiest men als startpunt |z|=2 |z’|=4 |z”|=16…enz Na veel transformaties komt men in oneindig, maar niet op een kromme
Complexe functietheorie Kiest men als startpunt |z|=1/2 |z’|=1/4 |z”|=1/16…enz Na veel transformaties komt men in nul terecht, maar niet op een kromme Daarom heet f(z)=z 2 met |z|=1 een fractalkromme (zie fig 10-28)
Fractal functie Als |z| >1 worden punten getransformeerd naar oneindig Als |z| =1 worden punten getransformeerd naar cirkel Als |z| >1 worden punten getransformeerd naar nul Voor sommige functies is de grens tussen die punten die naar het oneindige gaan een fractal kromme Een belangrijke functie is : f(z)=λz(1-z)= z’ Waarbij λ een complexe constante is Het gedrag testen van een getransformeerd punt in het complexe vlak om de positie van`de fractal te bepalen duurt lang
Fractal functie Een snellere methode om de punten te berekenen is de inverse van de transformatie functie z’=λz – λz 2 λz- λz 2 -z’=0 z 2 - z+z’/ λ=0 Hieruit z oplossen geeft: Met complexe rekenoperaties kan deze vergelijking opgelost worden voor reele en imaginaire delen van z x = re(z) y = im(z) (x,y) worden dan getekend
Fractal functie Omdat de inverse functie 2 getransformeerde posities geeft kiezen we random de éne of de andere stap in de iteratie Ook als het imaginaire deel van -4z’/λ negatief is, is een van de mogelijke transformaties in het 2 e kwadrant (x 0) De andere positie is verder, in het 4 e kwadrant
Fractal functie De transformaties zijn : L of R wordt random gekozen Een programma listing van deze formule is op de volgende sheets gegeven
Fractal programma
Fractal programma
Complexe functietheorie
Fractal programma
Fractal programma
Fractal programma Het programma begint in de main loop met initialisaties Het start met glutDisplayFunc Daar wordt gestart met een willekeurig punt z0(1.5,0.4) (zie displayFcn) die na transformatie niet op de fractalkromme hoeft te liggen Dat wordt 10 keer gedaan (zie selfSqTransf) Daarna wordt de kromme getekend met plotPoint Het is nog maar de vraag of de punten z convergeren naar een fractalkromme In fig zijn de punten geplot
Fractal programma
Uitleg programma Enige opmerkingen over het programma Er wordt steeds met complexe getallen gerekend struct( complexNum) { Glfloat x,y} x= reele deel, y =imaginaire deel lambda=lambda.x + i.lambda.y ( λ=x+iy) (x,y elementen van de structure vandaar de.) lambdaMagSq= lambda.x * lambda.x + lambda.y * lambda.y (|λ| 2 =x 2 +y 2 )
Uitleg programma Berekening complex getal 4/ λ fourOverLambda.x=4.0*lambda.x/lamdaMagSq fourOverLambda.y=-4.0*lambda.y/lamdaMagSq
Wortel complex getal Wortel uit een complex getal Bepaling Dan is; w=z 2 = x+iy = |z|e iφ Dan zijn er 2 oplossingen w 0 = |z| 1/2 e iφ/2 w 1 = |z| 1/2 e i(φ/2+π) =-|z| 1/2 e iφ/2 We kiezen alleen w 0 Nu is -1= e iπ (stelling van Euler) en Nu is e iφ = cos φ +isinφ (stelling van Euler) Dus w 0 = |z| 1/2 e iφ/2 = |z| 1/2 (cos φ/2 +isinφ/2)
Wortel complex getal Nu is: Invullen alleen de positieve wortels
Wortel complex getal Met x=Re(z) en y=Im(z) en
Uitleg programma Terug naar de formule Nu is: zodat Re(discr) = discr.x Im(discr) = discr.y
Uitleg programma Stel: fourOverlambda = 4/λ =a+bi Re(fourOverlambda) = fourOverlambda.x = a Im(fourOverlambda) = fourOverlambda.y = b Stel: z’ = c+di Re(z’) = z->x = c Im(z’) = z->y = d Dan is 4/ λ.z’ = (a+bi)(c+di) = ac+bci+adi+bdi 2 = ac-bd + i(ad+bc) Dan is: discr = 1-(4/λ.z’) = 1-ac-bd + i(ad+bc) Re(discr) = discr.x = 1-ac-bd Im(discr) = discr.y = ad+bc
Uitleg programma discr.x = 1- z->x * fourOverlambda.x - z->y * fourOverlambda.y discr.y = z->x * fourOverlambda.y - z->y * fourOverlambda.x Nu is: Wortel-formule invullen geeft:
Uitleg programma Zodat: In het programma : z->x = srqt ((discrMag + discr.x ) / 2.0) gevolgd door : z->x = 0.5 * (1 - z->x) In het programma : z->y = 0.5 * srqt ((discrMag -discr.x ) / 2.0) )))
Uitleg programma In het programma wordt negatieve wortel vermeden, dat kan als : |discr| +Re(discr) <0 is, dan is reele deel 0: z->x = 0 en z->y = 0.5 * srqt ((discrMag -discr.x ) / 2.0) En als: |discr| -Re(discr) <0 is,dan is imaginaire deel 0: z->y = 0 en z->x = srqt ((discrMag + discr.x ) / 2.0) gevolgd door : z->x = 0.5 * (1 - z->x)
Uitleg programma In het programma worden nog de keuzes voor+ of – random gedaan
Vraagstukken 1.Gegeven: met z = z+ iy Gevraagd: Reele deel van z’ (Re(z’)) en het imaginaire deel van z’ (Im(z’)) Oplossing: Re(z’)= x+1 Im(z’)= y
Vraagstukken 2.Gegeven: z’=5z 2 +2z +5 +i met z = x+ iy Gevraagd: Reele deel van z’ (Re(z’)) en het imaginaire deel van z’ (Im(z’)) Oplossing: z’= 5(x+iy)(x+iy) +2(x+iy) + 5 +i = 5(x 2 +2 ixy +i 2 y 2 ) +2x +i2y +5 +i = 5 x ixy -5y 2 +2x +i2y +5 +i Re(z’)= 5 x 2 -5y 2 +2x +5 Im(z’)= 10xy +2y +1
Voorbeelden fractal Enige voorbeelden
Voorbeelden fractal
Voorbeelden fractal