How to program a fractal?

后端 未结 14 1002
花落未央
花落未央 2020-12-04 05:34

I do not have any experience with programming fractals. Of course I\'ve seen the famous Mandelbrot images and such.

Can you provide me with simple algorithms for fra

14条回答
  •  南笙
    南笙 (楼主)
    2020-12-04 06:00

    Programming the Mandelbrot is easy.
    My quick-n-dirty code is below (not guaranteed to be bug-free, but a good outline).

    Here's the outline: The Mandelbrot-set lies in the Complex-grid completely within a circle with radius 2.

    So, start by scanning every point in that rectangular area. Each point represents a Complex number (x + yi). Iterate that complex number:

    [new value] = [old-value]^2 + [original-value] while keeping track of two things:

    1.) the number of iterations

    2.) the distance of [new-value] from the origin.

    If you reach the Maximum number of iterations, you're done. If the distance from the origin is greater than 2, you're done.

    When done, color the original pixel depending on the number of iterations you've done. Then move on to the next pixel.

    public void MBrot()
    {
        float epsilon = 0.0001; // The step size across the X and Y axis
        float x;
        float y;
        int maxIterations = 10; // increasing this will give you a more detailed fractal
        int maxColors = 256; // Change as appropriate for your display.
    
        Complex Z;
        Complex C;
        int iterations;
        for(x=-2; x<=2; x+= epsilon)
        {
            for(y=-2; y<=2; y+= epsilon)
            {
                iterations = 0;
                C = new Complex(x, y);
                Z = new Complex(0,0);
                while(Complex.Abs(Z) < 2 && iterations < maxIterations)
                {
                    Z = Z*Z + C;
                    iterations++;
                }
                Screen.Plot(x,y, iterations % maxColors); //depending on the number of iterations, color a pixel.
            }
        }
    }
    

    Some details left out are:

    1.) Learn exactly what the Square of a Complex number is and how to calculate it.

    2.) Figure out how to translate the (-2,2) rectangular region to screen coordinates.

提交回复
热议问题