使用libGDX绘制Mandelbrot集

时间:2017-01-15 12:52:04

标签: android libgdx

我想尝试在AIDE上使用libGDX渲染mandelbrot集(我只有我的手机才能编码)。所以,我研究了算法并尝试实现它。

为屏幕上的每个像素调用此函数 -

public int calcFract(int x, int y, int maxiter)
{
    zx = zy = 0;
    cx = (x - width/2) / zoom;
    cy = (y - height/2) / zoom;

    while( zx * zx + zy * zy < 4.0 && iter < maxiter )
    {
        tmp = zx * zx - zy * zy + cx;
        zy = 2.0 * zx * zy + cy;
        zx = tmp;
        iter++;
    }

    return iter | iter << 8;
}

这是create()回调 -

public void create()
{
    width = Gdx.graphics.getWidth();
    height = Gdx.graphics.getHeight();
    Gdx.input.setInputProcessor(this);
    fractal = new Pixmap(width, height, Pixmap.Format.RGB888);
    for (int i = 0; i < width; ++i)
        for (int j = 0; j < height; ++j)
        {
            int c = mandelbrot.calcFract(i, j, maxiter);
            fractal.drawPixel( i, j, Color.toIntBits(0xff, c, c, c));
        }

     fracTex = new Texture(fractal);
     batch = new SpriteBatch();
}

应用程序编译时没有错误,但是当我运行它时,它会显示我 -

notice the left side of the screen

这里也是render()回调 -

public void render()
{   
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    batch.draw(fracTex, 0, 0);
    batch.end();
}

请告诉我我的代码是否有任何问题。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我犯了一个非常不正常的错误。

如果你看一下我的代码,你会注意到在渲染像素图的第一个像素后,算法停止工作,因为它永远停留在maxiter,因为我忘了为每个像素重置iter。对于第一个之后的所有像素,iter = maxiter跳过while循环。这意味着第一个像素之后的所有像素都采用相同的颜色,破坏了一切。

我通过在calcFract()中的while循环之前将iter设置为0来修复它。