Java Mandelbrot刷新速度很慢,有没有办法让它更快?

Java Mandelbrot刷新速度很慢,有没有办法让它更快?,java,math,complex-numbers,fractals,mandelbrot,Java,Math,Complex Numbers,Fractals,Mandelbrot,我最近一直在做一个分形发生器,特别是在Mandelbrot集上。不幸的是,缩放和移动似乎非常不完善,需要很长时间才能刷新。我每次缩放时都会生成它,我知道这可能不是最有效的方法,而且我似乎找不到使用我理解的其他方法的代码。 以下是我使用的方法,第一种是初始生成,第二种是刷新方法 private void genMandelbrot(Dimension size) { for(int x=0;x<size.width;x++) { for(int y=0;y&l

我最近一直在做一个分形发生器,特别是在Mandelbrot集上。不幸的是,缩放和移动似乎非常不完善,需要很长时间才能刷新。我每次缩放时都会生成它,我知道这可能不是最有效的方法,而且我似乎找不到使用我理解的其他方法的代码。 以下是我使用的方法,第一种是初始生成,第二种是刷新方法

    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.");
}
genMandelbrot(尺寸大小){

对于(int x=0;x最有可能需要细分分形并计算不太有趣的分片强度。8000次重复次数很多。您也可以稍微简化计算。

最有可能需要细分分形并计算不太有趣的分片强度。8000次重复次数很多。您还可以简化计算有一点。

我想
单元格
是某种
列表
实现

在这种情况下,刷新方法的大部分时间都花在这一行上:


cells.set(cells.indexOf(c),new Cell(Color.getHSBColor(i%256,i%255,255*)((ii假设
cells
是某种
List
实现

在这种情况下,刷新方法的大部分时间都花在这一行上:


cells.set(cells.indexOf(c),新Cell(Color.getHSBColor(i%256,i%255,255*)((尝试优化前的iProfile。在哪里花费的时间最多?在尝试优化前的配置文件。在哪里花费的时间最多?