ich versuche ein julia setzen bild und programmieren dies in C. Ich habe versucht, einen Algorithmus zu erforschen, um ein Bild des Julia-Sets zu erstellen, werde aber von den meisten Beispielen online verwirrt (da die meisten Beispiele kopiert zu werden scheinen, aber mit wenig Erklärung dafür, was Schritt für Schritt passiert).julia set berechnung mit reellen zahlen
Ich habe meinen Code mehrere Male neu geschrieben, um mit Algorithmen zu passen, die ich online gefunden habe, aber mit wenig Erfolg. Derzeit verwende ich eine Iteration Funktion eine Farbe jeden Pixel in dem folgenden zu definieren:
// Loop through each pixel to work out new image set
int x, y;
for(x = 0; x < SIZE; x++){
for(y = 0; y < SIZE; y++){
int i = iterate(x, y, maxIterations, c);
image[x][y] = i % 256 + 255 + 255 * (i < maxIterations);
}
}
/* Iterate function */
int iterate(int x, int y, int maxI, double c[]){
double z, zx, zy, oldRe, oldIm; //real and imaginary parts of new and old
double xmin = -1.0, xmax = 1.0, ymin = -1.0, ymax = 1.0;
int k; // number of times iterated
//calculate the initial real and imaginary part of z
// z0 = (x + yi)^2 + c = (0 + 0i) + c = c
zx = 1.5*(x - SIZE/2)/(0.5*SIZE);
zy = 1.0*(y - SIZE/2)/(0.5*SIZE);
//start the iteration process
for(k = 1; k < maxI; k++){
//remember value of previous iteration
oldRe = zx;
oldIm = zy;
z = zx*zx - zy*zy + c[0];
//the actual iteration, the real and imaginary part are calculated
zx = oldRe * oldRe - oldIm * c[1] + c[0];
zy = 2 * oldRe * oldIm + c[1];
zy = 2.0*zx*zy + c[1];
zx = z;
//if the point is outside the circle with radius 2: stop
if((zx * zx + zy * zy) > 4) break;
}
/*
while(((zx * zx + zy * zy) > 4) && (k < maxI)) {
//remember value of previous iteration
z = zx*zx - zy*zy + c[0];
zy = 2*x*y-c[1];
zx = z;
//if the point is outside the circle with radius 2: stop
}
return k;
} */ Die kommentierte out while-Schleife ein zweiter Algorithmus fand ich online, aber ist auch nicht korrekt. Ich bin mir nicht sicher, was ich in der Gleichung vermisse. Irgendwelche Ideen?
(Ich suche keine Lösung, nur ein Pseudocode, der die reale, imaginäre komplexe Zahl in eine Position in meiner Bounding Box umwandeln kann, in diesem Fall: -1,1). Hier
komplexe Zahl Typ wird in Typ in c gebaut, so dass man z = z * z + c verwenden können – Adam