朱莉娅集合的距离估计器得到不好的结果

时间:2018-10-15 12:46:51

标签: c++ fractals mandelbrot

我一直在使用距离估计器而不是归一化的迭代计数来绘制Julia集。我通常使用下面的代码并反复处理迭代次数,直到获得足够好的图像为止

SELECT ccode.name,IFNULL(count(DISTINCT u.username),0) as total_active
,(count(DISTINCT u.username) - count(DISTINCT t.username)) as total_non_active
from m_ccode as ccode
left join m_user as u on u.ccode = ccode.id
left join t_safety_act t on t.username = u.username
and MONTH(t.date) = '10' AND YEAR(t.date) = '2018' group by ccode.id;

然后我在每个点上调用它并绘制一个位图;

double Mandelbrot::getJulia(double x, double y)
{
    complex<double> z(x, y);
    complex<double> c(-0.7269, 0.1889);

    double iterations = 0;

    while (iterations < MAX)
    {
        z = z * z + c;
        if (abs(z) > 2) {
            return iterations + 1.0 - log(log2(abs(z)));
            break;
        }
        iterations++;
    }
    return double(MAX);
}

经过600次迭代,我得到了;

decent Julia

这不是很好,但是比我现在尝试使用的距离估计器得到的更好。我已经实现了如下的距离估算器;

    ZoomTool zt(WIDTH, HEIGHT);
    zt.add(Zoom(WIDTH / 2, HEIGHT / 2, 4.0 / WIDTH));
    for (int y = 0; y < HEIGHT; y++) {
        for (int x = 0; x < WIDTH; x++) {
            pair<double, double> coords = zt.zoomIn(x, y);

            double iterations = Mandelbrot::getJulia(coords.first,
                coords.second);

            double ratio = iterations / Mandelbrot::MAX;
            double h = 0;
            double s= 0;
            double v = 0;

            if (ratio != 1)
            {
                h = 360.0*ratio;
                s = 1.0;
                v = 1.0;
            }

            HSV hsv(h, s,  v);
            RGB rgb(0, 0, 0);
            rgb = toRGB(hsv);

            bitmap.setPixel(x, y, rgb._r, rgb._g, rgb._b);
        }
    }

在600次迭代中,我得到以下图像 crappy julia

我不能正确规范颜色吗?我猜想这是因为我将标准化为360.0并从HSV转换为RGB。由于距离很小,我得到了非常紧凑的颜色分布。

0 个答案:

没有答案