// Tentative pour recréer les SFI // Ça marche bien avec des listes // On devrait pouvoir optimiser en plaçant au début les probabilités les plus grandes // Initialisation des listes, histoire de ne pas dire à chaque fois que ç’en sont w=list(); b=list(); p=list(); // Attention, les probabilités sont cumulatives // Arbre //w(1)=[0,0;0,.5]; b(1)=[0;0]; p(1)=.05; //w(2)=[.42,-.42;.42,.42]; b(2)=[0;.2]; p(2)=p(1)+.4; //w(3)=[.42,.42;-.42,.42]; b(3)=[0;.2]; p(3)=p(2)+.4; //w(4)=[.1,0;0,.1]; b(4)=[0;.2]; p(4)=1; // Arbre binaire //w(1)=[.5,0;0,.5]; b(1)=[-2.563477;-.000003]; p(1)=1/3; //w(2)=[.5,0;0,.5]; b(2)=[2.436544;-.000003]; p(2)=2/3; //w(3)=[0,-.5;.5,0]; b(3)=[4.873085;7.563492]; p(3)=1; // Carré //w(1)=[.5,0;0,.5]; b(1)=[0;0]; p(1)=1/4; //w(2)=w(1); b(2)=[0;.5]; p(2)=1/2; //w(3)=w(1); b(3)=[.5;.5]; p(3)=3/4; //w(4)=w(1); b(4)=[.5;0]; p(4)=1; // Carré non uniforme //w(1)=[.5,0;0,.5]; b(1)=[0;0]; p(1)=.55; //w(2)=w(1); b(2)=[0;.5]; p(2)=p(1)+.25; //w(3)=w(1); b(3)=[.5;.5]; p(3)=p(2)+.15; //w(4)=w(1); b(4)=[.5;0]; p(4)=1; // Chou-fleur //w(1)=[.403,-.25;.25,.403]; b(1)=[0;0]; p(1)=1/4; //w(2)=[.5,0;0,.5]; b(2)=[0;.5]; p(2)=1/2; //w(3)=[.403,.25;-.25,.403]; b(3)=[.5;.5]; p(3)=3/4; //w(4)=[.5,0;0,.5]; b(4)=[.5;0]; p(4)=1; // Corail //w(1)=[.307692,-.531469;-.461538,-.293706]; b(1)=[5.401953;8.655175]; p(1)=.4; //w(2)=[.307692,-.076923;.153846,-.447552]; b(2)=[-1.295248;4.152990]; p(2)=p(1)+.15; //w(3)=[0,.545455;.692308,-.195804]; b(3)=[-4.893637;7.269794]; p(3)=1; // Cristal //w(1)=[.696970,-.481061;-.393939,-.662879]; b(1)=[2.147003;10.310288]; p(1)=.747826; //w(2)=[.090909,-.443182;.515152,-.094697]; b(2)=[4.286558;2.925762]; p(2)=1; // Dendrites //w(1)=[.341,-.071;.071,.341]; b(1)=[0;0]; p(1)=1/6; //w(2)=[.038,-.346;.346,.038]; b(2)=[.341;.071]; p(2)=1/3; //w(3)=[.341,-.071;.071,.341]; b(3)=[.379;.418]; p(3)=1/2; //w(4)=[-.234,.258;-.258,-.234]; b(4)=[.72;.489]; p(4)=2/3; //w(5)=[.173,.302;-.302,.173]; b(5)=[.486;.231]; p(5)=5/6; //w(6)=[.341,-.071;.071,.341]; b(6)=[.659;-.071]; p(6)=1; // Dragon //w(1)=[.824074,.281482;-.212346,.864198]; b(1)=[-1.88229;-.110607]; p(1)=.787473; //w(2)=[.288272,.720988;-.463889,-.377778]; b(2)=[.785360;8.095795]; p(2)=1; // Courbe du dragon //w(1)=[.5,.5;-.5,.5]; b(1)=[0;0]; p(1)=1/2; //w(2)=[-.5,.5;-.5,-.5]; b(2)=[1;0]; p(2)=1; // Escalier du diable //w(1)=[1/3,0;0,1/2];b(1)=[0;0];p(1)=1/3; //w(2)=[1/3,0;0,0];b(2)=[1/3;1/2];p(2)=2/3; //w(3)=[1/3,0;0,1/2];b(3)=[2/3;1/2];p(3)=1; // Étoiles //w(1)=[.745455,-.459091;.406061,.887121]; b(1)=[1.460279;.691072]; p(1)=.912675; //w(2)=[-.424242,-.065152;-.175758,-.218182]; b(2)=[3.809567;6.741476]; p(2)=1; // Fonction de Van der Waerden w(1)=[1,0;0,2]/3;b(1)=[0;0];p(1)=1/3; w(2)=[1,0;0,-1]/3;b(2)=[1;2]/3;p(2)=2/3; w(3)=[1,0;0,2]/3;b(3)=[2;1]/3;p(3)=1; // Fougère //w(1)=[0,0;0,.16]; b(1)=[0;0]; p(1)=.01; //w(2)=[.85,.04;-.04,.85]; b(2)=[0;2]; p(2)=.85+p(1); //w(3)=[.2,-.26;.23,.22]; b(3)=[0;1]; p(3)=p(2)+(1-p(2))/2; //w(4)=[-.15,.28;.26,.24]; b(4)=[0;.9]; p(4)=1; // Autre fougère //w(1)=[0,0;0,.16]; b(1)=[0;0]; p(1)=.01; //w(2)=[.85,.04;-.02,.85]; b(2)=[0;2.1]; p(2)=p(1)+.85; //w(3)=[.2,-.26;.23,.42]; b(3)=[0;2.1]; p(3)=p(2)+.07; //w(4)=[-.15,.28;.26,.24]; b(4)=[0;2.1]; p(4)=1; // Encore une fougère //w(1)=[0,0;0,.16]; b(1)=[0;0]; p(1)=.1; //w(2)=[.197,-.257;.226,.223]; b(2)=[0;1.6]; p(2)=p(1)+.2; //w(3)=[-.15,.283;.26,.238]; b(3)=[0;.44]; p(3)=p(2)+.2; //w(4)=[.849,.037;-.037,.849]; b(4)=[0;1.6]; p(4)=1; // Courbe de Lévy //w(1)=[.5,-.5;.5,.5]; b(1)=[0;0]; p(1)=1/2; //w(2)=[.5,.5;-.5,.5]; b(2)=[.5;.5]; p(2)=1; // Pentagone de McWorter //w(1)=[.309,-.225;.225,.309]; b(1)=[0;0]; p(1)=1/6; //w(2)=[-.118,-.363;.363,-.118]; b(2)=[.309;.225]; p(2)=1/3; //w(3)=[.309,.225;-.225,.309]; b(3)=[.191;.588]; p(3)=1/2; //w(4)=[-.118,.363;-.363,-.118]; b(4)=[.5;.363]; p(4)=2/3; //w(5)=[.309,.225;-.225,.309]; b(5)=[.382;0]; p(5)=5/6; //w(6)=[.309,-.225;.225,.309]; b(6)=[.691;-.225]; p(6)=1; // Sapin //w(1)=[-.632407,-.614815;-.545370,.659259]; b(1)=[3.840822;1.282321]; p(1)=.888128; //w(2)=[-.036111,.444444;.210185,.037037]; b(2)=[2.071081;8.330552]; p(2)=1; // Carré de Sierpinski //w(1)=[1,0;0,1]/3; b(1)=[0;0]; p(1)=1/8; //w(2)=[1,0;0,1]/3; b(2)=[0;1/3]; p(2)=1/4; //w(3)=[1,0;0,1]/3; b(3)=[0;2/3]; p(3)=3/8; //w(4)=[1,0;0,1]/3; b(4)=[1/3;0]; p(4)=1/2; //w(5)=[1,0;0,1]/3; b(5)=[2/3;0]; p(5)=5/8; //w(6)=[1,0;0,1]/3; b(6)=[1;2]/3; p(6)=3/4; //w(7)=[1,0;0,1]/3; b(7)=[2;1]/3; p(7)=7/8; //w(8)=[1,0;0,1]/3; b(8)=[2;2]/3; p(8)=1; // Pentagone de Sierpinski //r=(3-sqrt(5))/2; //w(1)=[1,0;0,1]*r; b(1)=[0;0]; p(1)=.2; //w(2)=[1,0;0,1]*r; b(2)=[1-r;0]; p(2)=.4; //w(3)=[1,0;0,1]*r; b(3)=[cos(%pi/5);r*(sin(2*%pi/5)+sin(%pi/5))]; p(3)=.6; //w(4)=[1,0;0,1]*r; b(4)=[cos(%pi/5);sin(2*%pi/5)*2+sin(%pi/5)]*r; p(4)=.8; //w(5)=[1,0;0,1]*r; b(5)=[cos(2*%pi/5)-cos(%pi/5);sin(2*%pi/5)+sin(%pi/5)]*r; p(5)=1; // Tamis de Sierpinski //w(1)=[.5,0;0,.5]; b(1)=[0;0]; p(1)=1/3; //w(2)=[.5,0;0,.5]; b(2)=[0;1]; p(2)=2/3; //w(3)=[.5,0;0,.5]; b(3)=[1;1]; p(3)=1; // Stalagmites //w(1)=[.3,0;0,.3]; b(1)=[.5;.5]; p(1)=1/4; //w(2)=[.3,0;0,.6]; b(2)=[.4;0]; p(2)=1/2; //w(3)=[.5,0;0,.7]; b(3)=[.3;.3]; p(3)=3/4; //w(4)=[.5,0;0,.5]; b(4)=[0;.5]; p(4)=1; // Triadique de Cantor //w(1)=[1,0;0,1]/3; b(1)=[0;0]; p(1)=1/2; //w(2)=p(1); b(2)=[1;0]; p(2)=1; // Courbe de von Koch //w(1)=[1,0;0,1]/3; b(1)=[0;0]; p(1)=1/4; //w(2)=[1/6,-1/(2*sqrt(3));1/(2*sqrt(3)),1/6]; b(2)=[1/3;0]; p(2)=1/2; //w(3)=[1/6,1/(2*sqrt(3));-1/(2*sqrt(3)),1/6]; b(3)=[.5;1/(2*sqrt(3))]; p(3)=3/4; //w(4)=[1,0;0,1]/3; b(4)=[2/3;0]; p(4)=1; // Initialisations xdel; x=[0;0]; // Départ n=size(b); // Nombre de transformations // Algorithme function y=hasard(x) i=rand(1,'uniform'); // On choisit au hasard une des transformations j=1; while j<=n do if i<=p(j) then y=w(j)*x+b(j); // On transforme j=n+1; // On saute directement au point suivant else j=j+1; // On essaie si on a la transformation suivante end end endfunction while %t do x=hasard(x); plot2d(x(1),x(2),style=0,axesflag=0); end