Я недавно работал над фрактальным генератором и специально работал над множеством Мандельброта. К сожалению, масштабирование и перемещение, по-видимому, очень малоэффективны и требуют довольно много времени для обновления. Я генерирую его каждый раз, когда я увеличиваю масштаб, и я знаю, что это, вероятно, не самый эффективный способ сделать это, и я не могу найти код, который использует другой метод, который я понимаю. Это следующие методы, которые я использую, причем первое из них - это начальное поколение, второе - метод обновления.Мандельброт очень медленный, чтобы освежить, любой способ сделать это быстрее?
private void genMandelbrot(Dimension size) {
for(int x=0;x<size.width;x++) {
for(int y=0;y<size.height;y++) {
double moveX=globalx;
double moveY=globalx;
//zoom and x/y offset.
double real = 1.5 * (x - size.width/2)/(0.5 * zoom * size.width) + moveX;
double imaginary=(y - size.height/2)/(0.5 * zoom * size.height) + moveY;
double newRe=0,newIm=0,oldRe=0,oldIm=0;
int i;
for(i=0;i<8000;i++) {
oldRe = newRe;
oldIm = newIm;
newRe = oldRe * oldRe - oldIm * oldIm + real;
newIm = 2 * oldRe * oldIm + imaginary;
if((newRe * newRe + newIm * newIm) > 4) break;
}
Cell c = new Cell(Color.getHSBColor(i % 256, i % 255, 255 * ((i<20)? 1:0)), new Dimension(1,1), new Point(x,y));
cells.add(c);
}
}
}
public void refreshMandelbrot(Dimension size) {
for(Cell c : cells) {
double moveX=globalx;
double moveY=globalx;
int x=c.x;
int y=c.y;
//zoom and x/y offset.
double real = 1.5 * (x - size.width/2)/(0.5 * zoom * size.width) + moveX;
double imaginary=(y - size.height/2)/(0.5 * zoom * size.height) + moveY;
double newRe=0,newIm=0,oldRe=0,oldIm=0;
int i;
for(i=0;i<8000;i++) {
oldRe = newRe;
oldIm = newIm;
newRe = oldRe * oldRe - oldIm * oldIm + real;
newIm = 2 * oldRe * oldIm + imaginary;
if((newRe * newRe + newIm * newIm) > 4) break;
}
cells.set(cells.indexOf(c), new Cell(Color.getHSBColor(i % 256, i % 255, 255 * ((i<20)? 1:0)), new Dimension(1,1), new Point(x,y)));
}
System.out.println("Set refreshed.");
}
Профиль перед тем, как попытаться оптимизировать. Где больше всего времени тратится? – MrSmith42