Чтобы не тратить ваше время, я сокращу его:
Мой проект : графическое представление множества Мандельброта.
Мой прогресс : завершено, за исключением ошибки в функции увеличения / уменьшения
Ошибка : масштаб увеличения меньше (медленнее), чем масштаб уменьшения
Более короткая версия: как я могу имитировать увеличение / уменьшение коэффициента на jpanel.
В конце небольшая часть jPanel должна быть увеличена до всей jPanel,Каждый пиксель в jPanel представляет целое число, но вам не нужно беспокоиться об отсутствии целых чисел после увеличения.
Более длинная версия (только если вам нужна дополнительная информация):
функция масштабирования в наборе Мандельброта:
public void recalculate(int x, int y, int width, int height, double scale){
downright=new Complex(upleft.getReal()+stepwidth*(x+width/scale),upleft.getImg()-stepwidth*(y+height/scale));
upleft=new Complex(upleft.getReal()+stepwidth*(x-width/scale), upleft.getImg()-stepwidth*(y-height/scale));
stepwidth=(downright.getReal()-upleft.getReal())/width;
calc(lastrep);
}
Краткая терминология:
- прямо внизу - комплексное число справа внизупоследний пиксель, который будет нарисован на jpanel
- вверх, является, следовательно, верхним левым комплексным числом, первый пиксель, который будет нарисован на jpanel
- , ширина шага - это расстояние между каждымкомплексное число, представленное одним пикселем
- calc - это, наконец, функция, которая вычисляет каждый цвет для каждого пикселя в соответствии с правилами набора Мандельброта
параметры ширины и высоты - ширина / высота пикселяjpanel, x и y - это координаты увеличения и масштабирования коэффициента увеличения.
Когда я вызываю эту функцию mandelbrot.recalculate(x,y, getWidth(), getHeight(), 10);
, это должно увеличивать точку (x, y)так что новое представленное изображение составляет 1/5 фактического изображения.
1/5 должно быть потому, что начало изображения (вверх) составляет 1/10 от количества пикселей полной ширины и высоты, сдвинутых вверх и влево от точки (x, y) иконец изображения (прямо) составляет 1/10 от количества пикселей полной ширины и высоты, смещенных вниз и вправо.
Так что если я вызываю функцию после увеличения, как это: mandelbrot.recalculate(x,y, getWidth(), getHeight(), 0.1);
она должна полностью изменить весь процесс, но это не
, это предполагаемое увеличение: ![Zoom in on Mandelbrotset](https://i.stack.imgur.com/NuT3V.png)