How to program a fractal?

后端 未结 14 930
花落未央
花落未央 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.

    0 讨论(0)
  • 2020-12-04 06:02

    The mandelbrot set is generated by repeatedly evaluating a function until it overflows (some defined limit), then checking how long it took you to overflow.

    Pseudocode:

    MAX_COUNT = 64 // if we haven't escaped to infinity after 64 iterations, 
                   // then we're inside the mandelbrot set!!!
    
    foreach (x-pixel)
      foreach (y-pixel)
        calculate x,y as mathematical coordinates from your pixel coordinates
        value = (x, y)
        count = 0
        while value.absolutevalue < 1 billion and count < MAX_COUNT
            value = value * value + (x, y)
            count = count + 1
    
        // the following should really be one statement, but I split it for clarity
        if count == MAX_COUNT 
            pixel_at (x-pixel, y-pixel) = BLACK
        else 
            pixel_at (x-pixel, y-pixel) = colors[count] // some color map. 
    

    Notes:

    value is a complex number. a complex number (a+bi) is squared to give (aa-b*b+2*abi). You'll have to use a complex type, or include that calculation in your loop.

    0 讨论(0)
提交回复
热议问题