2017-06-11 2 views
1

Ich denke, das Problem ist, wie ich die kartesische Koordinate in eine komplexe Zahl umwandeln, aber ich habe jetzt Idee, wie. Können Sie mir bitte erklären, wie ich konvertieren soll? Hier ist, was ich versuchte, aber:Mandelbrot Set nicht in der Mitte angezeigt

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

Ich glaube, dein Koordinatensystem ist es. Ich denke, dein Fenster ist nicht -1 zu 1 zugeordnet, sondern (0,0) zu (Breite, Höhe) – Makogan

+0

Wie soll ich es zuordnen? Kannst du bitte Erklären? – Sparcsky

+0

Der Mindestwert für Real- und Imaginärteil sollte 0 sein, wenn Sie ihn dem Fenster zuordnen, und die Maximalwerte sollten die Fensterbreite und die Fensterhöhe sein – Makogan

Antwort

1

Ich denke, die Formel Sie suchen das ist:

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

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

Dies wird aus der Karte Formel abgeleitet: Y = (X-A) * (D-C)/(B-A) + C

Verwandte Themen