2012-02-07 8 views
0

Что дает возможность определить, насколько глубоким будет процесс масштабирования?
Я имею в виду, что раньше я пытался запустить mandelbrot с 200 итерацией, а затем сравнил результаты с 1000 итерациями. результаты были любопытными, потому что я получил одинаковый уровень масштабирования. Итерации были постоянными весь процесс, а набор mandelbrot определялся постоянным 512X512 пикселей. что я должен изменить, чтобы получить более глубокий уровень масштабирования?
спасибо!Почему разные значения масштабирования Мандельброта дают одинаковые результаты?

Редакция:

Редактировать: я также хотел бы упомянуть, что из красивого изображения, после того как я доберусь до 2-го уровня мандельброта, весь набор рассматривается как гигантский пиксель. почему это?

2d редактирование: после обширного исследования я только что заметил, что то, что делает весь набор, чтобы выглядеть как большой пиксель, потому что все точки получают подсчитывать же итерацию, в моем случае они все 60 ...

+0

Это было бы намного легче обсудить, если вы поделитесь своим итерационным кодом, поэтому мы используем те же термины - потому что я даже не уверен, что вы подразумеваете под «уровнем [s] of mandelbrot». – JimmiTh

ответ

1

Это может быть слишком абстрактным или слишком конкретным или непонятным. Как я уже сказал в комментарии, было бы легче обсудить с вашим кодом под рукой.

Если вы имеете в виду то, что, я думаю, вы подразумеваете под увеличением, вы бы изменили границы c (в формуле z[n+1] = z[n]^2 + c).

Чтобы объяснить, полный набор Мандельброта содержится в круге с радиусом 2 вокруг центра [0;0]. c в формуле представляет собой комплексное число, то есть [r;i] (реальное, мнимое), которое на экране компьютера соответствует x и y.

Другими словами, если мы разместим этот радиус 2 круга так, чтобы он точно содержался в нашем изображении, то [-2;2] будет верхним левым углом изображения, а [2;-2] - нижний правый угол.

Затем мы берем каждую точку нашего изображения, подсчитываем, каковы его координаты пикселя [x;y] соответствуют «фактической» системе координат меньшего размера [r;i]. Затем мы имеем наш c и можем отправить его через наши итерации.

Таким образом, чтобы «увеличить», вы бы выбрали другие границы [r;i], а не все [-2;2], [2:-2], например. [-1;1], [1:-1].

С 512x512 пикселями и «фактической» системой координат, которая теперь составляет 2 на 2, это означает, что каждый пиксель соответствует 2/512 единицам «фактической» системы координат. Таким образом, ваше первое значение r будет равным -1, следующее будет -1 + 2/512 = -0.99609375 и т. Д.

Число итераций определяет, насколько точным будет ваш рендеринг. Как правило, чем дальше вы «приближаетесь», тем точнее они должны нуждаться в, чтобы больше было итераций, необходимых для захвата деталей.

+1

Спасибо за ответ! но я думаю, мне удалось решить проблему. что на самом деле произошло, так это то, что я представил свои точки как float ... поэтому после нескольких «Масштабов» у меня возникли проблемы с нулевой точностью. но теперь им предстоит новая проблема, когда CUDA говорит, что Double не поддерживается. Демонстрация плавания. im используя G105M –

+0

@igalk, точно! Для глубокого масштабирования вам нужна произвольная точность арифметики. – lhf

+0

@igalk «несколько» масштабирования не должны превышать предельные значения с плавающей запятой :-) Хотя я допускаю, что поплавок по умолчанию неточен, 1,8 -1 не равен 1,7. – karatedog

Смежные вопросы