如何平滑此Java Mandelbrot算法?

如何平滑此Java Mandelbrot算法?,java,render,smooth,mandelbrot,Java,Render,Smooth,Mandelbrot,我有一个函数,可以生成[0-255]范围内的Mandelbrot集的值。在计算之后,我使用一个预生成的调色板绘制结果,该调色板也有256个值 计算: int MAX = 255; private int calculateMandel(double positionX, double positionY) { int valueOne = 0; double complexReal = 0.0; double complexImaginery =

我有一个函数,可以生成
[0-255]
范围内的Mandelbrot集的值。在计算之后,我使用一个预生成的调色板绘制结果,该调色板也有256个值

计算:

int MAX = 255;

private int calculateMandel(double positionX, double positionY) {
        int valueOne = 0;
        double complexReal = 0.0;
        double complexImaginery = 0.0;
        double complexRealSquare = 0.0;
        double complexImaginerySquare = 0.0;

        while (valueOne < MAX && complexRealSquare + complexImaginerySquare < 4.0) {
            complexImaginery = 2.0 * complexReal * complexImaginery + positionY;
            complexReal = complexRealSquare - complexImaginerySquare + positionX;
            complexRealSquare = complexReal * complexReal;
            complexImaginerySquare = complexImaginery * complexImaginery;

            valueOne++;
        }

        return valueOne;
    }
int MAX=255;
专用int计算器模型(双位置X、双位置Y){
int valueOne=0;
双复数实=0.0;
双络合剂Maginery=0.0;
双复数realsquare=0.0;
双络合剂MaginerySquare=0.0;
而(valueOne
结果:

int MAX = 255;

private int calculateMandel(double positionX, double positionY) {
        int valueOne = 0;
        double complexReal = 0.0;
        double complexImaginery = 0.0;
        double complexRealSquare = 0.0;
        double complexImaginerySquare = 0.0;

        while (valueOne < MAX && complexRealSquare + complexImaginerySquare < 4.0) {
            complexImaginery = 2.0 * complexReal * complexImaginery + positionY;
            complexReal = complexRealSquare - complexImaginerySquare + positionX;
            complexRealSquare = complexReal * complexReal;
            complexImaginerySquare = complexImaginery * complexImaginery;

            valueOne++;
        }

        return valueOne;
    }

这显然是一个非常糟糕的渲染,因为可以看到级别,它不够平滑。
如何使我的图片更平滑?像这样:

mandelbrot集的工作方式是,它测试收敛到一个有限数所需的迭代次数,当
complexRealSquare+complexMaginerySquare<4.0
设置为255的最大值限制了收敛所需的迭代次数,因此有一个锐利的截止线,为您提供了所看到的线条


要消除线条,您需要有255种以上的颜色来映射。你可以不只是用蓝色来画画,例如从红色开始,从红色移到蓝色。

为了减少像素化,你可以对小于像素宽度一半的小值增量进行4或5点{(
positionX
+-
delta
positionY
+-
delta
)}的平均计算。这将通过给你一个“典型”的颜色使图片变得平滑,从上面看像素下的区域应该是这样的。但由于计算的迭代次数的整数性质,它不会删除深蓝色的外部带。有很多方法可以定制配色方案……我想提出一些类似于直方图法的建议,这也包含在评论中@leonbloy链接的文章中。在阅读那篇文章之前,不要接受我的黑客建议,我想这是你的答案。

你用什么来渲染图像?您是否启用了抗锯齿?您可能需要将最大值设置得更高,并使用定义更明确的颜色托盘。为分形渲染着色是一门艺术。你读过这个吗?