Раскраска Мандельброт - PullRequest
       6

Раскраска Мандельброт

2 голосов
/ 21 января 2012

Я придумал что-то вроде этого:

float MinRe = -2.0f; // real
float MaxRe = 1.0f;
float MinIm = -1.0f; // imaginary
float MaxIm = MinIm + (MaxRe - MinRe) * WindowData.Height / WindowData.Width;

float Re_factor = (MaxRe - MinRe) / (WindowData.Width - 1);
float Im_factor = (MaxIm - MinIm) / (WindowData.Height - 1);

int MaxIterations = 50;
int iter=0;

for (int y = 0; y < WindowData.Height; ++y)
{
    double c_im = MaxIm - y * Im_factor; // complex imaginary
    for (int x = 0; x < WindowData.Width; ++x)
    {
        double c_re = MinRe + x * Re_factor; // complex real

        // calculate mandelbrot set
        double Z_re = c_re, Z_im = c_im; // Set Z = c
        bool isInside = true;

        for (iter=0; iter < MaxIterations; ++iter)
        {
            double Z_re2 = Z_re * Z_re, Z_im2 = Z_im * Z_im;
            if (Z_re2 + Z_im2 > 4)
            {
                isInside = false;
                break;
            }
            Z_im = 2 * Z_re * Z_im + c_im;
            Z_re = Z_re2 - Z_im2 + c_re;
        }

        if(isInside) 
        {
            GL.Color3(0, 0, 0);
            GL.Vertex2(x, y);
        }
    }
}

Я пробовал несколько способов, но большую часть времени заканчивал одним цветом вокруг набора или целым экраном того же цвета.

Как правильно настроить цвета?

Ответы [ 4 ]

1 голос
/ 21 января 2012

Когда я попробовал это, я просто установил внешний цвет на RGB (значение, значение, 1), где значение - это (на вашем языке) четвертый корень (iter / MaxIterations).Это выглядит как довольно хороший переход от белого к синему.Не такой яркий, как у Даффимо, но с меньшим «полосатым» эффектом.

1 голос
/ 21 января 2012

Вот как я это сделал: проверьте исходный код в репозитории Source Forge.

http://craicpropagation.blogspot.com/2011/03/mandelbrot-set.html

0 голосов
/ 21 мая 2017

Я обнаружил опытным путем, что если вы используете что-то подобное: цвет (R, G, B), где R, G, B принимает значения от 0 до 255.

Тогда эта функция дает действительно красивый результат. f(x,f,p) = 255*(cos(sqrt(x)*f + p))^2, где x обозначает текущую итерацию, f частоту и p фазу.

А затем примените функцию для каждого цветового аргумента с разностью фаз 120:

color(f(iter,1,0),f(iter,1,120),f(iter,1,240)

0 голосов
/ 21 октября 2012

попытаться отобразить результат вашего вычисления. Проверьте, какой ввод требуется для вашей функции окраски

Смотри также

http://en.wikibooks.org/wiki/Fractals/Iterations_in_the_complex_plane/Mandelbrot_set

НТН

Адам

...