Я пытаюсь представить Mandelbrot с OpenGL и обнаружил очень странное поведение, когда дело доходит до гладкой раскраски.Непрерывная раскраска фрактала
Давайте предположим, для текущего комплексного значения C
, алгоритм уцелели после n
итераций, когда Z
была доказана более чем 2.
Я запрограммировал окраски часть так:
if(n==maxIterations){
color=0.0; //0.0 is black in OpenGL when put to each channel of RGB
//Points in M-brot set are colored black.
} else {
color = (n + 1 - log(log(abs(Z)))/log(2.0))/maxIterations;
//continuous coloring algorithm, color is between 0.0 and 1.0
//Points outside M-brot set are colored depending of their absolute value,
//from brightest near the edge of set to darkest far away from set.
}
glColor3f(color ,color ,color);
//OpenGL-command for making RGB-color from three channel values.
проблема в том, что это просто не работает. Некоторое сглаживание примечательно, но оно не идеально.
Но когда я добавить два дополнительных итераций (только что это где-то без объяснения причин)
Z=Z*Z+C;
n++;
в «другое» ветвп до вычисления цвета, картина выходит абсолютно, изящно гладкой.
Почему это происходит? Зачем нам добавлять дополнительные итерации в окрашивающую часть после проверить, что точка должна быть в комплекте?
Просто из любопытства. Что это за язык? Интересно, так как у него есть функция abs(), которая обрабатывает комплексные числа. –
Это Visual C++. Код был написан с использованием класса Visual C++. Проверьте это здесь: http://msdn.microsoft.com/en-us/library/0352zzhd.aspx –
fyodorananiev