Как увеличить масштаб набора Мандельброта? - PullRequest
4 голосов
/ 16 апреля 2011

Я могу сгенерировать изображение размера Мандельброта размером 400x400 от minReal до maxReal и от minImaginary до maxImaginary. Таким образом,

makeMandel(minReal, maxReal, minImaginary, maxImaginary);

Мне нужно изменить, чтобы я мог,

makeMandel(centerX, centerY, Zoomlevel);
// generates a region of the mandelbrot set centered at centerX,centerY at a zoom level of Zoomlevel

(Учитывая уровень масштабирования представляет расстояние между пикселями и задается формулой Уровень масштабирования n = 2 ^ (-n), так что уровень масштабирования 1 означает, что пиксели разнесены на 0,5 единицы, уровень масштабирования 2, 0,25 и т. Д. ..)

Мой вопрос: как мне вычислить аргументы первой функции makeMandel из аргументов второй? Я знаю, что первая функция способна масштабировать и перемещаться, но я не знаю, как рассчитать правильные числа для любого заданного центра и уровня масштабирования.

Я пытался заставить это работать более трех дней, и я действительно запутался. Я пробовал рисовать столы и т. Д. На бумаге и отрабатывать это. Я прочитал большинство документов, которые вы найдете в Google при поиске набора Мандельброта, и пару предыдущих вопросов о стекопереработке, но я до сих пор не понимаю. Пожалуйста, помогите мне.

1 Ответ

4 голосов
/ 16 апреля 2011

Вы можете решить это следующим образом.Если у вас есть два определения

centerX = (minReal + maxReal)/2
sizeX = maxReal - minReal

, вы можете рассчитать протяженность по оси с помощью

minReal = centerX - sizeX/2
maxReal = centerX + sizeX/2

. Затем размер вычисляется с использованием zoomLevel:

sizeX = 2^(-zoomLevel) * baseSize

Те же формулы справедливы для y и мнимой оси.

sizeY = 2^(-zoomLevel) * baseSize   
minImaginary = centerY - sizeY/2
maxImaginary = centerY + sizeY/2

Единственное, что можно определить как константу, это ваш baseSize, т. Е. Расширение по действительной и воображаемой оси, когда zoomLevel равно нулю.Вы можете рассмотреть различные baseSize в реальном и воображаемом направлении, чтобы покрыть неквадратное соотношение сторон вашего изображения.

...