Я пытаюсь написать код для отображения набора Мандельброта для чисел от (-3, -3) до (2,2) на моем терминале. Функция main генерирует и передает комплексное число для функции анализа. Функция анализа возвращает символ "*" для комплексного числа Z в наборе и "." для чисел, лежащих вне множества.
Код:
#define MAX_A 2 // upperbound on real
#define MAX_B 2 // upper bound on imaginary
#define MIN_A -3 // lowerbnd on real
#define MIN_B -3 // lower bound on imaginary
#define NX 300 // no. of points along x
#define NY 200 // no. of points along y
#define max_its 50
int analyze(double real,double imag);
void main()
{
double a,b;
int x,x_arr,y,y_arr;
int array[NX][NY];
int res;
for(y=NY-1,x_arr=0;y>=0;y--,x_arr++)
{
for(x=0,y_arr++;x<=NX-1;x++,y_arr++)
{
a= MIN_A+ ( x/( (double)NX-1)*(MAX_A-MIN_A) );
b= MIN_B+ ( y/( (double)NY-1 )*(MAX_B-MIN_B) );
//printf("%f+i%f ",a,b);
res=analyze(a,b);
if(res>49)
array[x][y]=42;
else
array[x][y]=46;
}
// printf("\n");
}
for(y=0;y<NY;y++)
{
for(x=0;x<NX;x++)
printf("%2c",array[x][y]);
printf("\n");
}
}
Функция анализа принимает координаты на мнимой плоскости; и вычисляет (Z ^ 2) + Z 50 раз; и при вычислении, если комплексное число взорвалось, функция возвращает сразу же, иначе функция возвращается после завершения 50 итераций;
int analyze(double real,double imag)
{
int iter=0;
double r=4.0;
while(iter<50)
{
if ( r < ( (real*real) + (imag*imag) ) )
{
return iter;
}
real= ( (real*real) - (imag*imag) + real);
imag= ( (2*real*imag)+ imag);
iter++;
}
return iter;
}
Итак, я анализирую 60000 (NX * NY) чисел и отображаю их на терминале с учетом соотношения 3: 2 (300200), я даже пробовал 4: 3 (NX: NY), но результат остается таким же, а сгенерированная форма не даже близко к набору мандлброта:
следовательно, вывод выглядит перевернутым, я просмотрел и наткнулся на такие строки, как:
(x - 400) / ZOOM;
(y - 300) / ZOOM;
на многих кодах Мандельброта, но я не могу понять, как эта строка может исправить мой вывод.
Я думаю, у меня проблемы с отображением вывода на терминал!
(LB_Real,UB_Imag) --- (UB_Real,UB_Imag)
| |
(LB_Real,LB_Imag) --- (UB_Real,LB_Imag)
Любая подсказка / помощь будет очень полезна