Некоторая помощь в рендеринге набора Мандельброта - PullRequest
4 голосов
/ 01 ноября 2010

Мне дали работу над фрактальной визуализацией множества Мандельброта.

Я не ищу полного решения (естественно), я прошу помощи в отношении орбит комплексных чисел.

Скажем, у меня есть заданное Complex число, полученное из точки на комплексной плоскости. Теперь мне нужно перебрать последовательность орбит и построить точки в зависимости от того, увеличиваются ли орбиты на порядки или нет.

Как мне собрать орбиты комплексного числа? Любое руководство высоко ценится (ссылки и т. Д.). Любые указатели на математические функции, необходимые для проверки последовательности орбит, например, Math.pow()

Я использую Java, но здесь это не особо актуально.

Еще раз спасибо, Алекс

Ответы [ 4 ]

7 голосов
/ 01 ноября 2010

Когда вы отображаете набор Мандельброта, вы просто переводите реальную и воображаемую плоскости в координаты x и y соответственно.

Так, например, комплексное число 4.5 + 0.27i переводится в x = 4.5, y = 0.27.

Множество Мандельброта - это все точки, в которых уравнение Z = Z² + C никогда не достигает значения, где | Z |> = 2, но на практике вы включаете все точки, в которых значение не превышает 2, в течение определенного числа итераций, например 1000. Чтобы получить цветные визуализации, которые вы обычно видите в наборе, вы назначаете разные цвета точкам вненабор в зависимости от того, как быстро они достигают предела.

Поскольку это комплексные числа, уравнение на самом деле Zr + Zi = (Zr + Zi)² + Cr + Ci.Вы бы поделили это на два уравнения, одно для реальной плоскости и одно для мнимой плоскости, а затем это просто алгебра.C - это координата точки, которую вы хотите проверить, а начальное значение Z равно нулю.

Вот изображение из моего многопоточного генератора Мандельброта:)

Mandelbrot set

3 голосов
/ 01 ноября 2010

На самом деле множество Мандельброта - это множество комплексных чисел, для которых сходится итерация.

Таким образом, единственные точки в наборе Мандельброта - это большой скучный цвет в середине.и все красивые цвета, которые вы видите, не делают ничего, кроме представления скорости, с которой точки около границы (но не с той стороны) вращаются в бесконечность.* т.е. выберите любое комплексное число c.Теперь, чтобы определить, есть ли оно в наборе, многократно повторяйте его z_0 = c, z_ (k + 1) = z_k ^ 2 + c, и z_k будет приближаться к нулю или бесконечности.Если его предел (так как k стремится к бесконечности) равен нулю, то он в. В противном случае нет.

Можно доказать, что однажды | z_k |> 2, это не собирается сходиться.Это хорошее упражнение в оптимизации: IIRC | Z_k | ^ 2> 2 достаточно ... в любом случае, возведение в квадрат сэкономит вам дорогую функцию sqrt ().

1 голос
/ 01 ноября 2010

У Wolfram Mathworld есть хороший сайт , в котором говорится о наборе Мандельброта.

Сложный класс будет наиболее полезным.

Может быть, такой пример, как this , будет стимулировать некоторые мысли.Я бы не рекомендовал использовать апплет.

Вы должны знать, как выполнять операции сложения, сложения, вычитания, умножения, деления и вычисления с комплексными числами в дополнение к таким функциям, как синус, косинус, экспонента и т. Д.Если вы не знаете их, я бы начал там.

Книга, из которой меня учили, была Руэль В. Черчилль "Сложные переменные" .

0 голосов
/ 19 июня 2011
/d{def}def/u{dup}d[0 -185 u 0 300 u]concat/q 5e-3 d/m{mul}d/z{A u m B u
m}d/r{rlineto}d/X -2 q 1{d/Y -2 q 2{d/A 0 d/B 0 d 64 -1 1{/f exch d/B
A/A z sub X add d B 2 m m Y add d z add 4 gt{exit}if/f 64 d}for f 64 div
setgray X Y moveto 0 q neg u 0 0 q u 0 r r r r fill/Y}for/X}for showpage
...