【问题标题】:Mandelbrot Set not displaying at center曼德布罗集不在中心显示
【发布时间】:2017-06-11 01:41:13
【问题描述】:

我认为问题在于我如何将笛卡尔坐标转换为复数,但我现在知道如何。你能解释一下我应该如何转换吗?这是我尝试过的:

double c_Im = (y + (maxIm - minIm)) / height;
double c_Re = (x + (maxRe - minRe)) / width;

代码:

float minRe = -2.0;
float maxRe = 2.0;
double minIm = -2.0;
double maxIm = 2.0;

for (size_t y = 0; y < height; y++)
    {
        double c_Im = (y + (maxIm - minIm)) / height;

        for (size_t x = 0; x < width; x++)
        {
            double c_Re = (x + (maxRe - minRe)) / width;
            float dx = 0, dy = 0;
            int z = 0;
            while (dx * dx + dy * dy < 4 && z < maxIterator)
            {
                float temp = (dx * dx - dy * dy) + c_Re;
                dy = 2 * dx * dy + c_Im;
                dx = temp;
                z++;
            }
            image.setPixel(x, y, Color(z % 255, z % 255, z % 255));

        }
    }

not_expected_output.jpg

【问题讨论】:

  • 我认为这是您的坐标系。我认为你的窗口没有映射到 -1 到 1 而是 (0,0) 到 (width, height)
  • 我应该如何映射它?你能解释一下吗?
  • 映射到窗口时,实部和虚部的最小值都应为0,最大值应为窗口宽度和窗口高度

标签: c++ fractals


【解决方案1】:

我认为您正在寻找的公式是这样的:

double c_Im = y * (maxIm - minIm) / height + minIm;

double c_Re = x * (maxRe - minRe) / width + minRe;

这是从地图公式推导出来的:Y=(X-A)*(D-C)/(B-A)+C

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多