Я работаю над фракталами времени побега в качестве своего проекта 12-го класса, который будет написан на С++ с использованием простой библиотеки graphics.h, которая устарела, но кажется достаточной. Код для создания множества Мандельброта, кажется, работает, и я предположил, что множества Жюлиа будут его вариацией. Вот код: (Здесь fx и fy — это просто функции для преобразования фактических комплексных координат, таких как (-0,003,0,05), в фактическое значение пикселя на экране.)
int p;
x0=0, y0=0;
long double r, i;
cout<<"Enter c"<<endl;
cin>>r>>i;
for(int i= fx(-2); i<=fx(2); i++)
{
for(int j= fy(-2); j>=fy(2); j--)
{
long double x=0.0, y= 0.0,t;
x= gx(i), y= gy(j);
int k= -1;
while(( x*x + y*y <4)&& k<it-1)
{
t= x*x - y*y + r;
y= 2*x*y + i ;
x=t;
k++;
}
p= k*pd;
setcolor(COLOR(colour[p][0],colour[p][1],colour[p][2]));
putpixel(i,j,getcolor());
}
}
Но, похоже, это не так. Окно вывода показывает весь круг радиуса = 2 с цветом, соответствующим времени выхода 1 итерации.
Кроме того, пытаясь найти решение этой проблемы, я увидел, что все алгоритмы, которые использовали другие, инициализируют начальные координаты примерно так:
x = (col - width/2)*4.0/width;
y = (row - height/2)*4.0/width;
Может кто-нибудь объяснить, что я упускаю?
(int j= fy(-2); j>=fy(2); j--)
цикл, если вы уменьшите переменную цикла? Это будет означать, чтоfy(-2)
больше, чемfy(2)
. - person karatedog   schedule 29.11.2015it
? Я бы предложил обычное, пока вы отлаживаете, имитируйте все входные данные и используйте постоянные значения вместо переменных (например, заменитеit
на 50) - person karatedog   schedule 29.11.2015it
- это любое значение, введенное пользователем, в любом месте от ч/б от 1 до 1275. У меня есть массив из 1275 цветов [требуется улучшение, но пока работает нормально [набор Мандельброта]] . - person Sh.A   schedule 30.11.2015z = z^2 + c
наz = z^2 + <constant>
, и все готово. У меня есть ответ на другой вопрос (но вы поймете): stackoverflow.com/a/29984188/216248 а> - person karatedog   schedule 30.11.2015