J’ai un vieux papier qui traine ici, y a tous les détails.
Dans le principe, ça fonctionne comme ça :
Tout d’abord, faut savoir qu’un ensemble de Julia, c’est l’ensemble des points qui ne convergent pas vers un cycle attractif. Pour les polynômes, l’un de ces cycles est le point à l’infini (qui est fixe, et attractif, c’est donc bien un cycle attractif). La plupart des algorithmes se contentent de chercher le bassin du point à l’infini, ça donne ce qu’on appelle l’ensemble de Julia rempli.
Mon algorithme fonctionne en deux étapes :
- Pour une fraction rationnelle donnée, on cherche des cycles attractifs (ça se fait rapidement, de façon largement efficace par rapport au reste). Par exemple pour le lapin on en trouve 2 : celui à l’infini et puis un autre cycle.
- Pour chaque pixel à dessiner, on itère et on attend de voir quand est-ce qu’il va tomber proche d’un cycle attractif. On colore selon le temps qu’il a fallu.
Les gros avantages sont les suivants :
- L’ajouts de cycles attractifs dans la collection ne change pas particulièrement la complexité. Le gros de la complexité vient du nombre d’itérations qu’il faut produire pour calculer la convergence d’un point.
Sauf qu’un cycle qui n’est pas détecté, c’est tout son bassin qui doit passer par toutes les itérations. Un ensemble de Julia fait de façon naïve va demander énormément de calculs pour les points qui convergent vers des cycles qui ne sont pas le point à l’infini. Donc il y a réduction drastique du nombre d’itérations produites. D’ailleurs, par un argument mathématique, on peut montrer que l’ensemble de Julia est (dans les cas qu’on étudie) de mesure nulle, il est donc très improbable d’avoir des points qui demandent beaucoup d’itérations : c’est pour ça que les images sont surtout en gris clair et que les points noirs sont rares.
- On peut calculer des ensembles de Julia pour autre chose que des polynômes. C’est ce qui est nécessaire pour calculer des fractales de Newton par exemple.
- On a une information sur le cycle vers lequel ça converge. Ça permet de proposer une coloration, et ça apporte une information dynamique importante. Dans le code par défaut c’est en noir et blanc, mais en passant en mode couleur, ça le fait (et gratuitement en plus).
Update
Sinon j’ai suivi ta recommendation et j’ai fait le remplacement de Complexe par complex<double>. Les perfs semblent pas particulièrement meilleures. Ceci dit c’est plus propre
Pour les questions de copie en ref, etc. je suis pas assez habitué, faudrait que quelqu’un m’indique plus précisément là où faut faire les changements.