papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Un autre ensemble de fractales par IFS Mar 22 Fév 2022 - 1:18 | |
| Comme d'habitude, tout est dans le code. Régalez-vous! - Code:
-
rem ============================================================================ rem Fractal par IFS rem ============================================================================ rem Un système de fonctions itérées est composé d’un ensemble de transformations, rem w1, w2...wn. rem Chacune de ces transformations peut être à peu près n’importe quelle rem transformation affine normale. rem La seule restriction est qu’il doit s’agir d’une transformation contractante. rem Cela signifie que si vous appliquez la transformation, cela rapproche deux points. rem Les transformations peuvent être écrites en notation matricielle comme suit : rem rem | x | | a b | | x | | e | rem w | | = | | | | + | | rem | y | | c d | | y | | f | rem rem Chacune de ces transformations w1,w2...wn a une valeur p1,p2...pn qui rem représente la probabilité qu’une transformation particulière soit choisie. rem La somme de p1,p2...pn doit être égale à 1. rem ============================================================================ rem Les équations d’un IFS sont : rem _______________________________ rem | | rem | x(n+1) = a*x(n) + b*y(n) + e | rem | y(n+1) = c*x(n) + d*y(n) + f | rem |_______________________________|
rem Tout le problème consiste à déterminer les 6 coefficients a, b, c, d, e, f rem et la probabilité pour chaque transformation rem ============================================================================ dim a,b,c,d,e,f,p dim x,y,xn,yn,iter,maxiter,i label choix maxiter = 50000 : ' modifier cette variable selon la vitesse de votre machine width 0,1000 : height 0,700 picture 10 : width 10,600 : height 10,520 : 2d_target_is 10 container_option 20 : top 20,20 : left 20,width_client(10)+20 : height 20,500 : width 20,300 font_name 20,"arial black" : caption 20,"Faites votre choix" option 30 : caption 30,"Fougère I" option 40 : caption 40,"Fougère II" option 50 : caption 50,"Arbre I" option 60 : caption 60,"Arbre II" option 70 : caption 70,"Spirale" option 80 : caption 80,"Type Mandelbrot" option 90 : caption 90,"Arbre III" option 100 : caption 100,"Rameau" option 110 : caption 110,"Dragon" option 120 : caption 120,"Christmas Tree" option 130 : caption 130,"Fougère III" option 140 : caption 140,"Fougère IV" option 150 : caption 150,"Triangle de Sierpinski" option 160 : caption 160,"Fougère V" option 170 : caption 170,"Fougère VI" option 180 : caption 180,"Fougère VII" option 190 : caption 190,"Centipede" option 200 : caption 200,"Levy C Curve" option 210 : caption 210,"Sierpinski Carpet" option 220 : caption 220,"Hexagone de Sierpinski" option 230 : caption 230,"Test I" option 240 : caption 240,"Test II" option 250 : caption 250,"Une autre fougère"
for i = 30 to 250 step 10 parent i,20 : top i,2*i-40 : left i,10 : width i,230 : on_click i,choix next i button 900 : top 900,height(0)-80 : left 900,width(10)+80 : caption 900,"Quitter" on_click 900,choix alpha 999 : top 999,height(0)-80 : left 999,20 : font_bold 999 font_name 999,"Arial" : font_color 999,255,0,0 : font_size 999,12 caption 999,"Papydall vous propose des Fractales tracées par IFS"
end rem ============================================================================ Choix: select number_click case 30 : Fougere_I(250,520,50,50) case 40 : Fougere_II(250,520,50,50) case 50 : Arbre_I(300,400,180,180) case 60 : Arbre_II(300,300,60,60) case 70 : Spirale(300,450,30,40) case 80 : Mandelbrot_Like(250,60,380,420) case 90 : Arbre_III(10,500,500,500) case 100 : Rameau(300,320,120,120) case 110 : Dragon(200,300,300,300) case 120 : Christmas_Tree(100,500,450,450) case 130 : Fougere_III(300,450,120,60) case 140 : Fougere_IV(250,500,40,60) case 150 : Triangle_Sierpinski(50,450,500,500) case 160 : Fougere_V(250,500,80,70) case 170 : Fougere_VI(250,500,80,80) case 180 : Fougere_VII(300,450,100,60) case 190 : Centipede(300,450,40,40) case 200 : Levy_C_Curve(200,300,200,200) case 210 : Sierpinski_Carpet(100,650,400,400) case 220 : Sierpinski_Hexagon(100,480,450,450) case 230 : Test_I(100,400,450,450) case 240 : Test_II(20,550,600,600) case 250 : Une_Autre_Fougere(10,500,800,800) case 900 : terminate end_select return rem ============================================================================ SUB Fougere_I(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Fougère I : Tracé en cours ... " for iter = 1 to maxiter p = rnd(1) if p < 0.1 a = 0.0 : b = 0.0 : c = 0.0 : d = 0.16 : e = 0.0 : f = 0.0 : ' Tige else if (p >= 0.1) and (p < 0.18) a = 0.2 : b = -0.26 : c = 0.23 : d = 0.22 : e = 0.0 : f = 1.6 : ' Grandes folioles de gauche else if (p >= 0.18) and (p < 0.26) a = -0.15 : b = 0.28 : c = 0.26 : d = 0.24 : e = 0.0 : f = 0.44 : ' Grandes folioles de droite else a = 0.75 : b = 0.04 : c = -0.04 : d = 0.85 : e = 0.0 : f = 1.6 : ' Petites folioles end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================ SUB Fougere_II(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Fougère II : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.01 a = 0.0 : b = 0.0 : c = 0.0 : d = 0.16 : e = 0.0 : f = 0.0 : ' Tige else if p < 0.08 a = 0.2 : b = -0.26 : c = 0.23 : d = 0.22 : e = 0.0 : f = 1.6 : ' Grandes folioles de gauche else if p < 0.15 a = -0.15 : b = 0.28 : c = 0.26 : d = 0.24 : e = 0.0 : f = 0.44 : ' Grandes folioles de droite else a = 0.85 : b = 0.04 : c = -0.04 : d = 0.85 : e = 0.0 : f = 1.6 : ' Petites folioles end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 0 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================ ' Cette fougère s'appelle : la fougère Cyclosorus SUB Fougere_III(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Fougère III : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.02 a = 0.0 : b = 0.0 : c = 0.0 : d = 0.25 : e = 0.0 : f = -0.4 : ' Tige else if p < 0.09 a = 0.035 : b = -0.2 : c = 0.16 : d = 0.04 : e = -0.09 : f = 0.02 : ' Grandes folioles de gauche else if p < 0.16 a = -0.04 : b = 0.2 : c = 0.16 : d = 0.04 : e = 0.083 : f = 0.12 : ' Grandes folioles de droite else a = 0.95 : b = 0.005 : c = -0.005 : d = 0.93 : e = -0.002 : f = 0.5 : ' Petites folioles end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================ SUB Fougere_IV(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Fougère IV : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.04 a = 0.0 : b = 0.0 : c = 0.0 : d = 0.16 : e = 0.0 : f = 0.04 else if p < 0.08 a = 0.2 : b = -0.29 : c = 0.23 : d = 0.22 : e = 0 : f = 1.6 else if p < 0.16 a = -0.2 : b = 0.28 : c = 0.26 : d = 0.25 : e = 0 : f = 0.44 else a = 0.7 : b = 0.035 : c = -0.04 : d = 0.8 : e = 0 : f = 1.6 end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================ SUB Fougere_V(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Fougère V : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.02 a = 0.0 : b = 0.0 : c = 0.0 : d = 0.25 : e = 0.0 : f = -0.4 else if p < 0.09 a = 0.035 : b = -0.2 : c = 0.16 : d = 0.04 : e = -0.09 : f = 0.02 else if p < 0.16 a = -0.04 : b = 0.2 : c = 0.16 : d = 0.04 : e = 0.083 : f = 0.12 else a = 0.95 : b = 0.005 : c = -0.005 : d = 0.93 : e = -0.002 : f = 0.5 end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================ rem ============================================================================ ' Culcitia Dubia SUB Fougere_VI(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Fougère VI : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.02 a = 0.0 : b = 0.0 : c = 0.0 : d = 0.25 : e = 0.0 : f = -0.14 else if p < 0.09 a = 0.09 : b = -0.28 : c = 0.3 : d = 0.11 : e = 0.0 : f = 0.6 else if p < 0.16 a = -0.09 : b = 0.28 : c = 0.3 : d = 0.09 : e = 0.0 : f = 0.7 else a = 0.85 : b = 0.02 : c = -0.02 : d = 0.83 : e = 0.0 : f = 1 end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================ ' Fishbone Fern SUB Fougere_VII(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Fougère VII : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.02 a = 0.0 : b = 0.0 : c = 0.0 : d = 0.25 : e = 0.0 : f = -0.4 else if p < 0.09 a = 0.0035 : b = -0.11 : c = 0.27 : d = 0.01 : e = -0.05 : f = 0.005 else if p < 0.16 a = -0.04 : b = 0.11 : c = 0.27 : d = 0.01 : e = 0.047 : f = 0.06 else a = 0.95 : b = 0.002 : c = -0.002 : d = 0.93 : e = -0.002 : f = 0.5 end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================ SUB Arbre_I(offsetX,offsetY,scaleX,scaleY) dim_local r,s,theta,phi,e,f inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Arbre I : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.1 r = 0.05 : s = 0.60 : theta = 0.0 : phi = 0.0 : e = 0.0 : f = 0.0 else if (p >= 0.1) and (p < 0.2) r = 0.05 : s = -0.5 : theta = 0.0 : phi = 0.0 : e = 0.0 : f = 1.0 else if (p >= 0.2) and (p < 0.4) r = 0.6 : s = 0.5 : theta = 0.698 : phi = 0.698 : e = 0.0 : f = 0.6 else if (p >= 0.4) and (p < 0.6) r = 0.5 : s = 0.45 : theta = 0.349 : phi = 0.3492 : e = 0.0 : f = 1.1 else if (p >= 0.6) and (p < 0.8) r = 0.5 : s = 0.55 : theta = -0.524 : phi = -0.524 : e = 0.0 : f = 1.0 else r = 0.55 : s = 0.4 : theta = -0.698 : phi = -0.698 : e = 0.0 : f = 0.7 end_if end_if end_if end_if end_if xn = r*cos(theta)*x - s*sin(phi)*y + e yn = r*sin(theta)*x + s*cos(phi)*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Arbre_II(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Arbre II : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.25 a = 0.14 : b = 0.01 : c = 0.0 : d = 0.51 : e = -0.08 : f = -1.31 else if p < 0.5 a = 0.43 : b = 0.52 : c = -0.45 : d = 0.50 : e = 1.49 : f = -0.75 else if p < 0.75 a = 0.45 : b = -0.49 : c = 0.47 : d = 0.47 : e = -1.62 : f = -0.74 else a = 0.49 : b = 0.0 : c = 0.0 : d = 0.51 : e = 0.02 : f = 1.62 end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Spirale(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Spirale : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p <= 0.90 a = 0.787879 : b = -0.424242 : c = 0.242424 : d = 0.859848 : e = 1.758647 : f = 1.408065 else if p <= 0.95 a = -0.121212 : b = 0.257576 : c = 0.151515 : d = 0.053030 : e = -6.721654 : f = 1.377236 else a = 0.181818 : b = -0.136364 : c = 0.090909 : d = 0.181818 : e = 6.086107 : f = 1.568035 end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Mandelbrot_Like(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Type Mandelbrot : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p <= 0.5 a = 0.202 : b = -0.805 : c = -0.689 : d = -0.342 : e = -0.373 : f = -0.653 else a = 0.138 : b = 0.665 : c = -0.502 : d = -0.222 : e = 0.660 : f = -0.277 end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Arbre_III(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 128,128,128 caption 0,"Arbre III : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.2 a = 0.195 : b = -0.488 : c = 0.344 : d = 0.443 : e = 0.4431 : f = 0.2452 else if p < 0.4 a = 0.462 : b = 0.414 : c = -0.252 : d = 0.361 : e = 0.2511 : f = 0.5692 else if p < 0.6 a = -0.637 : b = 0.0 : c = 0.0 : d = 0.501 : e = 0.8562 : f = 0.2512 else if p < 0.8 a = -0.035 : b = 0.07 : c = -0.469 : d = 0.022 : e = 0.4884 : f = 0.5069 else a = -0.058 : b = -0.07 : c = 0.453 : d = -0.111 : e = 0.5976 : f = 0.0969 end_if end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Rameau(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Rameau : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if (p >= 0) and (p <= .36) xn = .490662 * x + .357636 * y + .992214 yn = -.367636 * x + .490662 * y - .032411 else if (p >= .37) and (p <= .99) xn = -.1878 * x - .893171 * y - .283457 yn = -.67173 * x + .196847 * y + .612409 else xn = -.22345 * x - .170637 * y + .900462 yn = .129271 * x + .118929 * y - .778578 end_if end_if if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn : display next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================ SUB Dragon(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 caption 0,"Dragon : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p <= 0.5 a = 0.5 : b = -0.5 : c = 0.5 : d = 0.5 : e = 0.0 : f = 0.0 2d_pen_color 255,0,0 else a = -0.5 : b = -0.5 : c = 0.5 : d = -0.5 : e = 1.0 : f = 0.0 2d_pen_color 255,255,0 end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Christmas_Tree(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Christmas Tree : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 1/3 a = 0.0 : b = -0.5 : c = 0.5 : d = 0.0 : e = 0.5 : f = 0.0 else if p < 2/3 a = 0.0 : b = 0.5 : c = -0.5 : d = 0.0 : e = 0.5 : f = 0.5 else a = 0.5 : b = 0.0 : c = 0.0 : d = 0.5 : e = 0.25 : f = 0.5 end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Triangle_Sierpinski(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Triangle de Sierpinski : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 1/3 a = 0.5 : b = 0 : c = 0 : d = 0.5 : e = 0 : f = 0 2d_pen_color 255,0,0 else if p < 2/3 a = 0.5 : b = 0 : c = 0 : d = 0.5 : e = 0.5 : f = 0 2d_pen_color 0,255,0 else a = 0.5 : b = 0.0 : c = 0.0 : d = 0.5 : e = 0.25 : f = 0.433 2d_pen_color 0,0,255 end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Centipede(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 255,255,0 caption 0,"Centipede : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.787473 a = 0.824074 : b = 0.281482 : c = -0.212346 : d = 0.864198 : e = -1.882290 : f = -0.110607 else a = 0.088272 : b = 0.520988 : c = -0.463889 : d = -0.377778 : e = 0.785360 : f = 8.095795 end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Levy_C_Curve(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 caption 0,"Levy_C_Curce : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.5 a = 0.5 : b = -0.5 : c = 0.5 : d = 0.5 : e = 0.0 : f = 0.0 2d_pen_color 255,0,0 else a = 0.5 : b = 0.5 : c = -0.5 : d = 0.5 : e = 0.5 : f = 0.5 2d_pen_color 255,255,0 end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Sierpinski_Carpet(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 255,255,0 caption 0,"Sierpinski Carpet : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.125 a = 0.333 : b = 0.0 : c = 0.0 : d = 0.333 : e = 0.0 : f = 0.999 else if p < 0.25 a = 0.333 : b = 0.0 : c = 0.0 : d = 0.333 : e = 0.333 : f = 0.999 else if p < 0.375 a = 0.333 : b = 0.0 : c = 0.0 : d = 0.333 : e = 0.666 : f = 0.999 else if p < 0.5 a = 0.333 : b = 0.0 : c = 0.0 : d = 0.333 : e = 0.0 : f = 0.666 else if p < 0.625 a = 0.333 : b = 0.0 : c = 0.0 : d = 0.33 : e = 0.666 : f = 0.666 else if p < 0.75 a = 0.333 : b = 0.0 : c = 0.0 : d = 0.333 : e = 0.00 : f = 0.333 else if p < 0.875 a = 0.333 : b = 0.0 : c = 0.0 : d = 0.333 : e = 0.333 : f = 0.333 else a = 0.333 : b = 0.0 : c = 0.0 : d = 0.333 : e = 0.666 : f = 0.333 end_if end_if end_if end_if end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Sierpinski_Hexagon(offsetX,offsetY,scaleX,scaleY) dim_local p1 inactive 20 color 10,0,0,0 caption 0,"Hexagone de Sierpinski : Tracé en cours ..." p1 = 0.167 for iter = 1 to maxiter p = rnd(1) if p < p1 a = 0.33 : b = 0.0 : c = 0.0 : d = 0.33 : e = 0.046 : f = 0.131 2d_pen_color 255,255,0 else if p < 2*p1 a = 0.33 : b = 0.0 : c = 0.0 : d = 0.33 : e = 0.327 : f = -0.006 2d_pen_color 255,0,0 else if p < 3*p1 a = 0.33 : b = 0.0 : c = 0.0 : d = 0.33 : e = 0.044 : f = 0.487 2d_pen_color 0,255,0 else if p < 4*p1 a = 0.33 : b = 0.0 : c = 0.0 : d = 0.33 : e = 0.329 : f = 0.679 2d_pen_color 0,0,255 else if p < 5*p1 a = 0.330 : b = 0.0 : c = 0.0 : d = 0.33 : e = 0.617 : f = 0.521 2d_pen_color 0,255,255 else a = 0.33 : b = 0.0 : c = 0.0 : d = 0.33 : e = 0.621 : f = 0.164 2d_pen_color 255,0,255 end_if end_if end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Test_I(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Test I : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 1/3 a = 0.354 : b = 0.354 : c = -0.354 : d = 0.354 : e = -0.032 : f = 0.241 2d_pen_color 255,0,0 else if p < 2/3 a = 0.5 : b = 0 : c = 0 : d = 0.5 : e = 0.247 : f = 0.374 2d_pen_color 0,255,0 else a = -0.354 : b = -0.354 : c = -0.354 : d = 0.354 : e = 1.027 : f = 0.243 2d_pen_color 0,0,255 end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Test_II(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 0,128,0 caption 0,"Test II : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.24 a = 0.158 : b = 0.375 : c = -0.423 : d = 0.164 : e = 0.106 : f = 0.375 2d_pen_color 255,0,0 else a = 0.648 : b = 0.366 : c = -0.396 : d = 0.68 : e = 0.024 : f = 0.432 2d_pen_color 0,0,255 end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"terminé" active 20 END_SUB rem ============================================================================ SUB Une_Autre_Fougere(offsetX,offsetY,scaleX,scaleY) inactive 20 color 10,0,0,0 : 2d_pen_color 200,100,10 caption 0,"Une autre Fougère : Tracé en cours ..." for iter = 1 to maxiter p = rnd(1) if p < 0.010 a = 0.0 : b = -0.030 : c = 0.0 : d = 0.236 : e = 0.401 : f = 0.033 else if p < 0.131 a = -0.166 : b = -0.324 : c = -0.275 : d = 0.14 : e = 0.475 : f = 0.196 else if p < 0.266 a = 0.202 : b = 0.3 : c = -0.287 : d = 0.192 : e = 0.296 : f = 0.225 else a = 0.793 : b = -0.05 : c = 0.054 : d = 0.855 : e = 0.076 : f = 0.067 end_if end_if end_if xn = a*x + b*y + e yn = c*x + d*y + f if iter > 20 : ' Pour éviter les premiers point parasites 2d_point offsetx + xn * scalex, offsety - yn * scaley : display end_if x = xn : y = yn next iter caption 0,"Terminé" active 20 END_SUB rem ============================================================================
| |
|