Algorithmes de fractales - Algo - Programmation
Marsh Posté le 04-10-2002 à 00:28:11
j'avais fait un truc sur mandelbrot et julia attends...
un truc que j'avais trouvé sur citeweb, PrograZine, par Discase et loubail, enfin t'aurais pu les trouver n'importe où:
Mandelbrot:
Z(n+1) = Z(n)^2 + C
Z(0) = 0
C : point actuel (point en cours de rendu)
donc en fait, si tu traçes une image de 640x480, tu ramène le point en cours dans un domaine style -2,1.25 en X, -1.25,1.25 en Y. ( pixel en 0,0 => -2,-1.25, pixel en 639,479=> 1.25,1.25)
ça donne en pseudo-code:
---------------------
ITERATION est un ENTIER
Z est un COMPLEXE
C est un COMPLEXE
POUR chaque point C
ITERATION = 0
Z(0) = 0
REPETER
Z(n+1) = Z(n)^2 + C
ITERATION = ITERATION +1
JUSQU'A CE QUE Norme(Z(n+1)) > 2
Couleur(C) = ITERATION
FIN POUR
--------------------
Julia:
Z(n+1) = Z(n)² + C
C = constante de qui influance la fractale
Z(0) doit être les coordonnées du point à calculer
idem domaine sympa: -2, 2 en X -1.5, 1.5 en Y....
tu itéres tant que |Z|² est inférieur à une valeur (500-1000...)
----
Je me souviens à l'époque j'avais fait un truc de ouf pour générer un BMP de 2048 par 2048 points....
Marsh Posté le 04-10-2002 à 12:17:48
Merci bien je v essayer de me debrouiller avec ca
a+
Marsh Posté le 04-10-2002 à 12:44:59
Pour les ensembles de Mandelbrot et de Julia, la définition est "un point ne fait pas partie de l'ensemble si et seulement si la suite associée à ce point diverge quand n augmente".
Or vu la tête des suites en question, dès que Z(n) est égal ou supérieur à 2, la suite diverge. Inutile de s'arrêter autour de 500 ou 1000, donc, 2 suffit (l'algo en pseudo-code de bjone est bon, donc).
Par contre, puisqu'on calcule les termes d'une suite définie par récurrence, la question se pose de savoir, pour chaque point, combien de termes de cette suite on va calculer. Car il n'est pas question de calculer jusqu'à l'infini pour vérifier qu'effectivement la suite ne diverge pas. Et là, en effet, on s'arrête généralement à n=500, n=1000 ou n=2000. Si la suite n'a toujours pas divergé au bout de 500, 1000 ou 2000 termes, alors on considère qu'elle converge quand n tend vers l'infini, et que le point correspondant fait bien partie de l'ensemble.
Marsh Posté le 04-10-2002 à 15:08:34
yep...
et l'intensité lumineuse (la couleur quoi), est liée au nombre d'itération....
donc en fait l'art c'est de bien paramétrer la palette....
Marsh Posté le 04-10-2002 à 16:50:00
Ca, c'est une de manière de faire. L'ensemble est en noir (typiquement), et on colorie l'extérieur de l'ensemble en fonction de sa vitesse de "divergence".
On peut aussi colorier en noir l'extérieur de l'ensemble, et définir une couleur en fonction de la valeur du N-ième terme, par intervalles.
On peut aussi donner une fonction encore plus compliquée. Un truc rigolo, par exemple, c'est l'ensemble de Mandelbrot sous formes de bandes noires et blanches (genre, si N est pair après la boucle de calcul, on paint en blanc, sinon on peint en noir)...
Les variations sont infinies. Attention cependant de ne pas trop zoomer ailleurs qu'autour de zéro. Autour de 10^-15, on attint les limites de précision offerte par les réels dits "double-précision".
Marsh Posté le 04-10-2002 à 17:32:09
BifaceMcLeOD a écrit a écrit : Ca, c'est une de manière de faire. L'ensemble est en noir (typiquement), et on colorie l'extérieur de l'ensemble en fonction de sa vitesse de "divergence". On peut aussi colorier en noir l'extérieur de l'ensemble, et définir une couleur en fonction de la valeur du N-ième terme, par intervalles. On peut aussi donner une fonction encore plus compliquée. Un truc rigolo, par exemple, c'est l'ensemble de Mandelbrot sous formes de bandes noires et blanches (genre, si N est pair après la boucle de calcul, on paint en blanc, sinon on peint en noir)... Les variations sont infinies. Attention cependant de ne pas trop zoomer ailleurs qu'autour de zéro. Autour de 10^-15, on attint les limites de précision offerte par les réels dits "double-précision". |
grave, c'est dingue ce truc, on arrive a atteindre les limites de domaine et de précision des flottants (float ou double)..
ceci dit en optimisant le code de manière a maximiser l'utilisation des regsitres, on gagne en vitesse et en précision calculatoire....
pendant un moment je m'étais demandé, si à l'instar de Prime95, il était possible de tester la stablité numérique des FPUs via un algo de rendu fratacle et se mettant dans un domaine ou l'on tend vers de l'imprécision...
-------------
ça me fait penser qu'il faudrait que je recompile ce que j'ai fais pour le voir tourner sur mon xp à 1.7ghz....
Marsh Posté le 04-10-2002 à 17:34:45
Si t'en as marre de mandelbrot et julia, ca va te changer un peu : (suit les liens y'a de quoi t'occuper un peu )
http://dake.calodox.org/tuts/quaternions.html
Marsh Posté le 03-10-2002 à 23:49:03
Bonjour,
vala ben j'ai deja pu realiser un petit script en C qui genere une fractale et ce a l'aide d'un ami, mais j'aimerais avoir d'autres exemples d'algo de fractales, malheureusement sur google je ne trouve que des jolies images mais pas d'algos
si qqun a un bon site a me proposer la dessus,...
Accessoirement j'aimerais aussi un algo utilisant les ensembles de Mandelbrot, ca m'interresserait bcp de savoir comment qu'elle est generee celle la
merci.
---------------
J'ai une pierre à la place du coeur, et au milieu de cette pierre il y a un coeur.