2017-06-11 1 views
1

Je pense que le problème est de savoir comment je convertis la coordonnée cartésienne en un nombre complexe, mais j'ai maintenant une idée de comment. Pouvez-vous s'il vous plaît expliquer comment devrais-je convertir? Voici ce que j'ai essayé bien:Mandelbrot Ne pas afficher au centre

double c_Im = (y + (maxIm - minIm))/height; 
double c_Re = (x + (maxRe - minRe))/width; 

code:

float minRe = -2.0; 
float maxRe = 2.0; 
double minIm = -2.0; 
double maxIm = 2.0; 

for (size_t y = 0; y < height; y++) 
    { 
     double c_Im = (y + (maxIm - minIm))/height; 

     for (size_t x = 0; x < width; x++) 
     { 
      double c_Re = (x + (maxRe - minRe))/width; 
      float dx = 0, dy = 0; 
      int z = 0; 
      while (dx * dx + dy * dy < 4 && z < maxIterator) 
      { 
       float temp = (dx * dx - dy * dy) + c_Re; 
       dy = 2 * dx * dy + c_Im; 
       dx = temp; 
       z++; 
      } 
      image.setPixel(x, y, Color(z % 255, z % 255, z % 255)); 

     } 
    } 

not_expected_output.jpg not expected output

+4

Je pense que c'est votre système de coordonnées. Je pense que votre fenêtre n'est pas mappée -1 à 1 mais plutôt (0,0) à (largeur, hauteur) – Makogan

+0

Comment dois-je la mapper? Pouvez-vous s'il vous plaît expliquer? – Sparcsky

+0

Votre valeur minimale pour les parties réelle et imaginaire doit être 0 lorsque vous la mappez à la fenêtre, et les valeurs maximales doivent être la largeur de la fenêtre et la hauteur de la fenêtre – Makogan

Répondre

1

Je pense que la formule que vous cherchez est le suivant:

double c_Im = y * (maxIm - minIm)/height + minIm;

double c_Re = x * (maxRe - minRe)/width + minRe;

Ceci est dérivé de la formule de carte: Y = (X-A) * (D-C)/(B-A) + C