Bonjour,
Je cherche à réaliser, en Python, un programme permettant de dessiner un ensemble de Julia en utilisant Tkinter. Petite explication: on prend un point du plan d'affixe complexe z. On prend la suite définie par u0=z et un+1=u2+c, avec c un complexe. Si (un) diverge, on colorie le point en bleu. Sinon, on le colorie en noir.
J'ai donc fait un programme, que j'ai lancé. Le problème était que j'avais de nombreux points noirs dans la partie qui, en théorie, devait être bleue. Au début je pensais que c'était dû à l'imprécision quant au fait que la suite diverge ou non. J'ai alors changé les couleurs, utilisant le rouge et le bleu, et je me suis aperçu qu'en réalité, les points problématiques restaient noirs ... Le problème venait donc plutôt soit de l'affichage, soit des points testés. J'ai réfléchi au problème, essayé différents changements, mais rien n'y fait, je suis toujours bloqué ... Voilà le code:
Si quelqu'un pouvait éclairer ma lanterne, parce que là, je ne vois vraiment pas ...Code:#*-coding:Latin-1-* from tkinter import * #On importe tkiner pour l'affichage. def suite(a, b): """Fonction prenant en arguments a et b (a+ib) et déterminant si le point correspondant est noir ou bleu.""" i=0 #Correspond au nombre de termes calculés pour la suite. re=a im=b #Parties réelle et imaginaire. re2=im2=0 #Correspondront au carré des parties réelle et imaginaire (permettant de réduire légèrement le nombre de calculs). while i<40 and re2+im2<=4: #On calcule les 40 premiers termes, et on vérifie que leur distance à l'origine ne dépasse pas 2. tamp=re #Conserve la valeur de re. re2=re*re im2=im*im #On calcule les carrés de chaque partie. re=re2-im2-0.75 #On calcule la partie réelle de l'image du complexe précédent avec l'application f(z)=z*z-0.75. im=2*tamp*im #De même pour la partie imaginaire. i+=1 #i augmente de 1. if i==40 and re2+im2<=4: return ("red") #Si la boucle s'est interrompue car i==40, le point sera rouge. else: return("blue") #Sinon il sera bleu. couleurs={} #Dictionnaire avec comme clé, les coordonnées, et comme valeur, les couleurs. zoom=100 #Sert à déterminer la taille (100 semble être une valeur minimale correcte). for al_re in range(int(-1.5*zoom), int(1.5*zoom)): for al_im in range(int(-1.2*zoom), int(1.2*zoom)): #Pour tous les points dans une portion du plan (espacés d'un certain intervalle): borne=suite(al_re/zoom, al_im/zoom) #borne prend la valeur de la couleur du point. couleurs[al_re, al_im]=borne #Le dictionnaire prend en clé le point et en valeur la couleur. fenetre=Tk() canvas=Canvas(fenetre, height=int(2.4*zoom), width=int(3*zoom)) canvas.pack() #On crée notre fenêtre et notre Canevas. for key, couleur in couleurs.items(): #Pour chaque élément du dictionnaire: canvas.create_oval(int(1.5*zoom)+key[0], int(1.2*zoom)-key[1], int(1.5*zoom)+key[0], int(1.2*zoom)-key[1], fill=couleur) #On colorie les points. fenetre.mainloop()
Merci d'avance et bonne journée
-----