Программирование Мандельброта очень просто.
Мой код quick-n-dirty ниже (не обязательно без ошибок, но с хорошей схемой).
Вот схема:
Множество Мандельброта лежит в комплексной сетке полностью внутри круга с радиусом 2.
Итак, начните с сканирования каждой точки в этой прямоугольной области.
Каждая точка представляет комплексное число (x + yi).
Повторите это комплексное число:
[new value] = [old-value]^2 + [original-value]
, отслеживая две вещи:
1.) Количество итераций
2.) Расстояние [нового значения] от источника.
Если вы достигли максимального количества итераций, все готово.
Если расстояние от начала координат больше 2, все готово.
Когда закончите, раскрасьте оригинальный пиксель в зависимости от количества выполненных вами итераций.
Затем перейдите к следующему пикселю.
public void MBrot()
{
float epsilon = 0.0001; // The step size across the X and Y axis
float x;
float y;
int maxIterations = 10; // increasing this will give you a more detailed fractal
int maxColors = 256; // Change as appropriate for your display.
Complex Z;
Complex C;
int iterations;
for(x=-2; x<=2; x+= epsilon)
{
for(y=-2; y<=2; y+= epsilon)
{
iterations = 0;
C = new Complex(x, y);
Z = new Complex(0,0);
while(Complex.Abs(Z) < 2 && iterations < maxIterations)
{
Z = Z*Z + C;
iterations++;
}
Screen.Plot(x,y, iterations % maxColors); // depending on the number of iterations, color a pixel.
}
}
}
Некоторые детали опущены:
1.) Узнайте, что такое квадрат комплексного числа и как его вычислить.
2.) Узнайте, как перевести (-2,2) прямоугольную область в экранные координаты.