1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
//Méthode censée dessiner l'ensemble de Juli
//cReel et cIma partie réel et imaginaire du nombre complexe c qui définit un ensemble de Julia,
//nbIteration c'est le nombre de fois qu'on itère la suite avant de s'arrêter,
//zoom c'est un facteur pour convertir les coordonnées d'un pixel en coordonnées du plan complexe, exemple si zoom=0.01, 100 pixel correspondent à 1.
void ZoneDessin::paintJulia(QPainter &painter, double cReel, double cIma, int nbIteration, double zoom )
{
double a, b; //partie réel et imaginaire de la suite.
for (int i=-height()/2; i<height()/2; i++){ //On boucle sur tout les pixels de l'écran:
for (int j=-width()/2; j<=width()/2; j++){ //on commence par celui en haut à gauche et on fini par celui en bas à droite
//(j'ai translaté le painter pour que l'origine soit au centre de l'écran avant)
a=j*zoom;//on convertit les coordonnées du pixel en coordonées cartésiennes.
b=i*zoom;
if(appartientJulia(a, b, cReel, cIma, nbIteration)){//Si le point appartient à l'ensemble de julia
painter.drawPoint(QPoint(j,i)); //on le peint en blanc...
}
}
}
}
bool ZoneDessin::appartientJulia(double a, double b, double cReel, double cIma,int nbIteration)
{
double module;
for(int i=0; i<nbIteration; i++){
a=a*a-b*b+cReel; //on calcul la suite jusqu'au nbIteration-ième terme
b=2*a*b+cIma;
module=sqrt(a*a+b*b);
if(module>2) //Si le module devient supérieur à 2 alors on est sur que la suite diverge
return false;
}
return true; //Sinon on est pas sur mais on fait l'approximation qu'elle converge
} |
Partager