Aşağıdaki Mandelbrot ayar kodunu C olarak biliyorum. Hesaplamayı yapıyorum ve son fraktal görüntü için bir .ppm dosyası oluşturuyorum. Mesele şu ki, fraktal görüntüüm baş aşağı, yani 90 derece döndürüldü. Kodumu uygulayarak kontrol edebilirsiniz: ./mandel> test.ppmMandelbrot ayar kodumdaki iyileştirme
Diğer taraftan renkleri değiştirmek istiyorum. Bu fraktal görüntü elde etmek istiyorum:
Benim son konu benim kod benim kod çalışma süresini kontrol olmamasıdır. Bu bölüm için de kodum var, ancak kod yürütmesi bittiğinde, çalışma süresini basmıyor. Birisi benim kodumda uygun değişiklikleri yapabilir ve bu fraktal görüntüyü elde etmeme yardımcı olur ve geçen süreyi gösterirse memnun olurum.
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
void color(int red, int green, int blue)
{
fputc((char)red, stdout);
fputc((char)green, stdout);
fputc((char)blue, stdout);
}
int main(int argc, char *argv[])
{
int w = 600, h = 400, x, y;
//each iteration, it calculates: newz = oldz*oldz + p, where p is the current pixel, and oldz stars at the origin
double pr, pi; //real and imaginary part of the pixel p
double newRe, newIm, oldRe, oldIm; //real and imaginary parts of new and old z
double zoom = 1, moveX = -0.5, moveY = 0; //you can change these to zoom and change position
int maxIterations = 1000;//after how much iterations the function should stop
clock_t begin, end;
double time_spent;
printf("P6\n# CREATOR: E.T/mandel program\n");
printf("%d %d\n255\n",w,h);
begin = clock();
//loop through every pixel
for(x = 0; x < w; x++)
for(y = 0; y < h; y++)
{
//calculate the initial real and imaginary part of z, based on the pixel location and zoom and position values
pr = 1.5 * (x - w/2)/(0.5 * zoom * w) + moveX;
pi = (y - h/2)/(0.5 * zoom * h) + moveY;
newRe = newIm = oldRe = oldIm = 0; //these should start at 0,0
//"i" will represent the number of iterations
int i;
//start the iteration process
for(i = 0; i < maxIterations; i++)
{
//remember value of previous iteration
oldRe = newRe;
oldIm = newIm;
//the actual iteration, the real and imaginary part are calculated
newRe = oldRe * oldRe - oldIm * oldIm + pr;
newIm = 2 * oldRe * oldIm + pi;
//if the point is outside the circle with radius 2: stop
if((newRe * newRe + newIm * newIm) > 4) break;
}
color(i % 256, 255, 255 * (i < maxIterations));
}
end = clock();
time_spent = (double)(end - begin)/CLOCKS_PER_SEC;
printf("Elapsed time: %.2lf seconds.\n", time_spent);
return 0;
}
Teşekkürler! Sorunumu çözdü. Ancak kodunuzun son kısmında parantez ile ilgili küçük bir döküm hatası var. Başka insanlar uğruna düzeltebilirseniz, bu harika olabilir. –
@erkant, çift demek mi (maxIterations)? Gcc ile benim için iyi çalışıyor. Başka bir şey mi? –
Evet, bunun hakkında konuşuyordum. Benim için çalışmadı, parantez gibi kullanmak zorundaydım ((double) maxIterations). –