Определение координат для увеличения Мандельброта

У меня есть набор Мандельброта, который я хочу увеличить. Мандельброт рассчитывается вокруг центральной координаты, размера Мандельброта и уровня масштабирования. Оригинальный Мандельброт сосредоточен вокруг
действительный = -0,6 и им = 0,4 с размером 2 в реальном и им.

Я хочу иметь возможность щелкнуть точку на изображении и рассчитать новую, увеличенную вокруг этой точки.

Окно, содержащее его, имеет размер 800x800px, поэтому я подумал, что клик в правом нижнем углу будет равен реальному центру = 0,4 и im = -0,6, а клик в верхнем левом углу будет реальным = -1,6, а im = 1.4

Я рассчитал это с:
для реальных ценностей
800a + b = 0,4 => a = 0,0025
0a + ​​b = -1,6 => b = -1,6

для мнимых значений
800c + d = -0,6 => c = -0,0025
0c + d = 1.4 => d = 1.4

Однако, это не работает, если я продолжу с размером Мандельброта 2 и уровнем масштабирования 2. Я что-то упускаю из-за координат с уровнями масштабирования?

0

Решение

У меня были похожие проблемы с увеличением моего C # Mandelbrot. Мое решение состояло в том, чтобы вычислить разницу от позиции щелчка до центра в процентах, умножить это на максимальное количество единиц (ширина / масштаб * 0,5, ширина = высота, масштаб = n * 100) от центра и добавить это к вашему текущему значение. Так что мой код был такой (при условии, что я получаю sx а также sy как параметры из клика):

        double[] o = new double[2];

double digressLRUD = width / zoom * 0.5; //max way up or down from the center in coordinates

double shiftCenterCursor_X = sx - width/2.0; //shift of cursor to center
double shiftCenterCursor_X_percentage = shiftCenterCursor_X / width/2.0; //shift in percentage
o[0] = x + digressLRUD * shiftCenterCursor_X_percentage; //new position

double shiftCenterCursor_Y = sy - width/2.0;
double shiftCenterCursor_Y_percentage = shiftCenterCursor_Y / width/2.0;
o[1] = y - digressLRUD * shiftCenterCursor_Y_percentage;

Это работает, но вам придется обновить масштаб (я использую его для умножения на 2).

Другой момент — переместить выбранный центр в центр изображения. Я сделал это с помощью некоторых расчетов:

        double maxRe = width / zoom;
double centerRe = reC - maxRe * 0.5;

double maxIm = height / zoom;
double centerIm = -imC - maxIm * 0.5;

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]