1

我有一个函数可以在[0-255]. 计算后,我借助预生成的调色板绘制结果,该调色板也有 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;
    }

结果:

在此处输入图像描述

这显然是一个非常糟糕的渲染,因为可以看到层次,它不够平滑。如何让我的图片更流畅?像这样:http: //upload.wikimedia.org/wikipedia/commons/2/21/Mandel_zoom_00_mandelbrot_set.jpg

4

2 回答 2

2

mandelbrot 集的工作方式是它测试收敛到有限数所需的迭代次数,当complexRealSquare + complexImaginerySquare < 4.0您设置为 255 的 MAX 值限制了收敛所需的迭代次数并因此具有锐利时,您会检测到这一点切断给你你看到的那些线。

要消除线条,您需要有超过 255 种颜色来映射。您可以通过不仅用蓝色绘画来做到这一点,还可以从红色开始,然后从红色移动到蓝色。

于 2013-12-06T19:55:29.543 回答
0

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

于 2013-12-06T20:28:57.567 回答