2016-05-04 6 views
0

J'ai essayé de créer un jeu de julia en python, mais ma sortie est Nan au début du processus. Je ne sais pas ce qui le cause. Juste pour la confession: mes cours de programmation ne sont pas bons, je ne sais pas vraiment ce que je fais, c'est principalement de ce que j'ai appris de Google.Julia Set Python

Voici le code:

import matplotlib.pyplot as plt 

c = complex(1.5,-0.6) 
xli = [] 
yli = [] 
while True: 
    z = c 
    for i in range(1,101): 
     if abs(z) > 2.0: 
      break 
     z = z*z + c 

    if i>0 and i <100: 
     break 

xi = -1.24 
xf = 1.4 
yi = -2.9 
yf = 2.1 

#the loop for the julia set 
for k in range(1,51): 
    x = xi + k*(xf-xi)/50 
    for n in range(51): 
     y = yi + n*(yf-yi)/50 
     z = z+ x + y* 1j 
     print z 
     for i in range(51): 
      z = z*z + c #the error is coming from somewhere around here 
      if abs(z) > 2: #not sure if this is correct 
       xli.append(x) 
       yli.append(y) 



plt.plot(xli,yli,'bo') 
plt.show()  

print xli 
print yli 

Merci d'avance :)

Répondre

1

Juste pour l'amour de la confession: je ne sais rien à propos de Julia définit ni matplotlib.

pyplot semble un choix étrange en raison de sa faible résolution et le fait que les couleurs ne peuvent être définis comme vecteur aux côtés de X & Y. Et il avait travaillé comme écrit, 'bo' aurait produit juste une grille de cercles bleus.

Votre première boucle while True: n'est pas nécessaire car vous avez choisi ce que vous croyez être un c viable.

Voici mon réusinage de votre code:

import matplotlib.pyplot as plt 

c = complex(1.5, -0.6) 

# image size 
img_x = 100 
img_y = 100 

# drawing area 
xi = -1.24 
xf = 1.4 
yi = -2.9 
yf = 2.1 

iterations = 8 # maximum iterations allowed (maps to 8 shades of gray) 

# the loop for the julia set 

results = {} # pyplot speed optimization to plot all same gray at once 

for y in range(img_y): 
    zy = y * (yf - yi)/(img_y - 1) + yi 
    for x in range(img_x): 
     zx = x * (xf - xi)/(img_x - 1) + xi 
     z = zx + zy * 1j 
     for i in range(iterations): 
      if abs(z) > 2: 
       break 
      z = z * z + c 
     if i not in results: 
      results[i] = [[], []] 
     results[i][0].append(x) 
     results[i][1].append(y) 

for i, (xli, yli) in results.items(): 
    gray = 1.0 - i/iterations 
    plt.plot(xli, yli, '.', color=(gray, gray, gray)) 

plt.show()  

SORTIE

enter image description here