当前位置: 首页 > 知识库问答 >
问题:

Mandelbrot分形不工作

阙庆
2023-03-14

我试着制作这个Mandelbrot分形发生器,但当我运行它时,我得到了一个像圆一样的输出。不知道为什么会这样。我想我的颜色可能有问题,但即使如此,形状也不正确。

public static Bitmap Generate(
        int width,
        int height,
        double realMin,
        double realMax,
        double imaginaryMin,
        double imaginaryMax,
        int maxIterations,
        int bound)
    {
        var bitmap = new FastBitmap(width, height);
        var planeWidth = Math.Abs(realMin) + Math.Abs(realMax); // Total width of the plane.
        var planeHeight = Math.Abs(imaginaryMin) + Math.Abs(imaginaryMax); // Total height of the plane.
        var realStep = planeWidth / width; // Amount to step by on the real axis per pixel.
        var imaginaryStep = planeHeight / height; // Amount to step by on the imaginary axis per pixel.
        var realScaling = width / planeWidth;
        var imaginaryScaling = height / planeHeight;
        var boundSquared = bound ^ 2;
        for (var real = realMin; real <= realMax; real += realStep) // Loop through the real axis.
        {
            for (var imaginary = imaginaryMin; imaginary <= imaginaryMax; imaginary += imaginaryStep) // Loop through the imaginary axis.
            {
                var z = Complex.Zero;
                var c = new Complex(real, imaginary);
                var iterations = 0;
                for (; iterations < maxIterations; iterations++)
                {
                    z = z * z + c;
                    if (z.Real * z.Real + z.Imaginary * z.Imaginary > boundSquared)
                    {
                        break;
                    }
                }
                if (iterations == maxIterations)
                {
                    bitmap.SetPixel(
                        (int)((real + Math.Abs(realMin)) * realScaling),
                        (int)((imaginary + Math.Abs(imaginaryMin)) * imaginaryScaling),
                        Color.Black);
                }
                else
                {
                    var nsmooth = iterations + 1 - Math.Log(Math.Log(Complex.Abs(z))) / Math.Log(2);
                    var color = MathHelper.HsvToRgb(0.95f + 10 * nsmooth, 0.6, 1.0);
                    bitmap.SetPixel(
                        (int)((real + Math.Abs(realMin)) * realScaling),
                        (int)((imaginary + Math.Abs(imaginaryMin)) * imaginaryScaling),
                        color);
                }
            }
        }
        return bitmap.Bitmap;
    }

共有1个答案

慎兴业
2023-03-14

这里有一个错误:

var boundSquared = bound ^ 2;

这应该是:

var boundSquared = bound * bound;

^运算符表示xor

 类似资料:
  • 对于复杂变量,我使用以下复杂类文件。 下面的java代码是Mandelbrot集合的迭代计算器示例。 提前谢谢!

  • 好的,这里有一个奇怪的问题,我有问题(用gcc btw编译) 下面是用于命令提示的Mandelbrot分形生成器的源代码。我以前做过这项工作,我想加快自己的测试速度,看看我能以多快的速度生成命令提示符中实际生成Mandelbrot分形所需的代码。我经常这样做是为了给自己找点乐子 不管怎样,我遇到了一个新问题,我不太明白问题是什么。当分形呈现时,无论我设置了多少次迭代或什么转义值,它都将始终显示为椭

  • 为了理解我在某个地方读到的一句话,我真的在挠头:“我们在分形中放大的越多,我们最可能需要执行的迭代就越多”。 到目前为止,我还没有找到任何数学/学术论文证明这一说法。我还设法找到了一个计算mandelbrot集的小代码,取自这里:http://warp.povusers.org/Mandelbrot/但是,我们无法理解缩放是如何影响迭代的。 谢谢!

  • 我开始制作一个mandelbrot集分形查看器。在放大分形时,我遇到了很多问题。如果您尝试缩放,查看器将刚好靠近中心。我已经尽我所能去理解这个困境。我怎样才能放大我的分形,当我放大时,它会放大屏幕的中心,而不是分形的中心?

  • 我在Python中使用PIL模块制作了一个Mandelbrot分形。现在,我想做一个放大到一点的GIF。我在网上看过其他代码,但不用说,我不明白,因为我使用的模式有点不同(我使用的是类)。 我知道要放大我需要改变比例。。。但我显然不知道如何实施它。

  • 我见过许多mandelbrot图像生成器绘制mandelbrot的低分辨率分形,然后不断改进分形。这是一个平铺算法吗?以下是一个例子:http://neave.com/fractal/ 更新:我发现关于递归细分和计算mandelbrot:http://www.metabit.org/~rfigura/figura fractal/math。html。也许可以使用kd树来细分图像? 更新2:http