Home | Papers | Reports | Projects | Code Fragments | Dissertations | Presentations | Posters | Proposals | Lectures given | Course notes |
<< 4. Quad-Trees | 6. Fractals: Julia Sets and the Mandelbröt set >> |
5. Iterated Function SystemsWerner Van Belle1*+ - werner@yellowcouch.org, werner.van.belle@gmail.com Abstract : Takes a detour in Iterated Function Systems (IFS)
Reference:
Werner Van Belle, Thomas Unger; Iterated Function Systems; |
Neem een vast coordinaten systeem. Een punt in het vlak RxR kan dan geschreven worden als P = (x,y) relatief ten opzichte van dat coordinaat systeem. Punten kunnen opgeteld en afgetrokken worden door hun coordinaten respectievelijk op te tellen of af te trekken. Een punt kan vermenigvuldigd worden met een reeel getal door elke coordinaat van het punt te vermenigvuldigen met dit getal.
Een lineare afbeelding is een transformatie die met elk punt P in het vlak een punt F(P) associeert zodat:
F(P1+P2)=F(P1)+F(P2)
Voor alle punten P1 en P2 en
F(sP)=sF(P)
Voor elk reeel getal s en alle punten P
Een lineare transformatie ten opzichte van het huidige coordinatensysteem kan gerepresenteerd worden door een matrix
waarbij, als P = (x,y) en F(P)=(u,v), dan
Een affiene lineare transformatie is een lineartie transformatie gevolgd door een translatie. Met andere woorden, als F een lineare mapping is en Q=(e,f) is een punt dan is de nieuwe mapping:
Als hierin P = (x,y) en w(P) = (u,v) dan kan de transformatie geschreven worden als
W wordt de hutchinson operator genoemd. De essentie van een geitereerd functie systeem is het herhalen van de operator W. We vertrekken met een bepaalde starttekening A0. Hieruit bekomen we A1=W(A0). A2=W(A1) en zo verder. Een IFS genereerd een sequentie van dergelijke tekeningen om zo te convergeren tot een eindtekening , dewelke de attractor van het IFS genoemd wordt. Merk op dat deze onafhankelijk is van de gegeven starttekening.1
Shrijf een programma dat gegeven een aantal affiiene transformaties de eindtekening op het scherm tekend. Noot: zoek de parameters van de affiene transformatie om de sierpinski driehoek te kunnen visualiseren.
Oef2: Test uw algoritme met de volgende parameters
The Twin Christmas Tree
a |
b |
c |
d |
e |
f |
0 |
-0.5 |
0.5 |
0 |
0.5 |
0 |
0 |
0.5 |
-0.5 |
0 |
0.5 |
0.5 |
0.5 |
0 |
0 |
0.5 |
0.25 |
0.5 |
A Dragon With Treefold Symmetry
a |
b |
c |
d |
e |
f |
0 |
0.577 |
-0.577 |
0 |
0.951 |
0.5893 |
0 |
0.577 |
-0.577 |
0 |
0.4413 |
0.7893 |
0 |
0.577 |
-0.577 |
0 |
0.0952 |
0.9893 |
Crystal with Five Transformations
a |
b |
c |
d |
e |
f |
0.382 |
0 |
0 |
0.382 |
0.3072 |
0.619 |
0.382 |
0 |
0 |
0.382 |
0.6033 |
0.4044 |
0.382 |
0 |
0 |
0.382 |
0.0139 |
0.4044 |
0.382 |
0 |
0 |
0.382 |
0.1253 |
0.0595 |
0.382 |
0 |
0 |
0.382 |
0.492 |
0.0595 |
A Tree
a |
b |
c |
d |
e |
f |
0.195 |
-0.488 |
0.344 |
0.443 |
0.4431 |
0.2452 |
0.462 |
0.414 |
-0.252 |
0.361 |
0.2511 |
0.5692 |
-0.058 |
-0.07 |
0.453 |
-0.111 |
0.5976 |
0.0969 |
-0.035 |
0.07 |
-0.469 |
-0.022 |
0.4884 |
0.5069 |
-0.637 |
0 |
0 |
0.501 |
0.8562 |
0.2513 |
Barnsley’s Fern
a |
b |
c |
d |
e |
f |
0.849 |
0.037 |
-0.037 |
0.849 |
0.075 |
0.183 |
0.197 |
-0.226 |
0.226 |
0.197 |
0.4 |
0.049 |
-0.15 |
0.283 |
0.26 |
0.237 |
0.575 |
-0.084 |
0 |
0 |
0 |
0.16 |
0.5 |
0 |
#include <vga.h> static struct transform {float a,b,c,d,e,f;} t[3] = {{0.0,-0.5,0.5,0.0,0.5,0.0}, {0.0,0.5,-0.5,0.0,0.5,0.5}, {0.5,0.0,0.0,0.5,0.5,0.5}}; float Fx(int nr, float x, float y) {return x*t[nr].a + y*t[nr].b + t[nr].e;} float Fy(int nr, float x, float y) {return x*t[nr].c + y*t[nr].d + t[nr].f;} void drawifs(float x, float y,int d) { if (d>0) { drawifs(Fx(0,x,y),Fy(0,x,y),d-1); drawifs(Fx(1,x,y),Fy(1,x,y),d-1); drawifs(Fx(2,x,y),Fy(2,x,y),d-1); } else vga_drawpixel(x*0,y*0); } void main(void) { vga_setmode(G640x480x16); vga_setcolor(4); drawifs(0,0,5); sleep(0); }
1 De affiene transformaties die we zullen gebruiken zijn effectief contracties. De IFSen die we zullen implementeren zijn deterministisch. Het is evengoed mogelijk random IFSen te genereren.
http://werner.yellowcouch.org/ werner@yellowcouch.org |