Burning Ship fractal

The Burning Ship fractal, first described and created by Michael Michelitsch and Otto E. Rössler in 1992, is generated by iterating the function:

High-quality overview image of the Burning Ship fractal
High-quality image of the large ship in the left antenna

in the complex plane which will either escape or remain bounded. The difference between this calculation and that for the Mandelbrot set is that the real and imaginary components are set to their respective absolute values before squaring at each iteration. The mapping is non-analytic because its real and imaginary parts do not obey the Cauchy–Riemann equations.[1]

Implementation

Animation of a continuous zoom-out to show the amount of detail for an implementation with 64 maximum iterations

The below pseudocode implementation hardcodes the complex operations for Z. Consider implementing complex number operations to allow for more dynamic and reusable code. Note that the typical images of the Burning Ship fractal display the ship upright: the actual fractal, and that produced by the below pseudocode, is inverted along the x-axis.

for each pixel (x, y) on the screen, do:
    x := scaled x coordinate of pixel (scaled to lie in the Mandelbrot X scale (-2.5, 1))
    y := scaled y coordinate of pixel (scaled to lie in the Mandelbrot Y scale (-1, 1))

    zx := x // zx represents the real part of z
    zy := y // zy represents the imaginary part of z 

    iteration := 0
    max_iteration := 1000
  
    while (zx*zx + zy*zy < 4 and iteration < max_iteration) do
        xtemp := zx*zx - zy*zy + x 
        zy := abs(2*zx*zy) + y // abs returns the absolute value
        zx := xtemp
        iteration := iteration + 1

    if iteration = max_iteration then // Belongs to the set
        return insideColor

    return iteration × color
gollark: https://a.gh0.pw/3
gollark: I mean making good use of the DNS packets, not CPU use on each end; I don't really care about that.
gollark: So you probably need checksums now and you use up even more of the packet size.
gollark: And you also need to be able to autodetect properties of the system of DNS servers between you and the authoritative one doing the actual bridging. But that might randomly change (e.g. if you switch network) and start messing up your data.
gollark: But you also want to be able to send data up efficiently, but you're probably using much of the limited space for user data which won't get munged by recursive DNS/proxies/whatever on the session token and whatever, so now you have to deal with *that*.

References

  1. Michael Michelitsch and Otto E. Rössler (1992). "The "Burning Ship" and Its Quasi-Julia Sets". In: Computers & Graphics Vol. 16, No. 4, pp. 435–438, 1992. Reprinted in Clifford A. Pickover Ed. (1998). Chaos and Fractals: A Computer Graphical Journey — A 10 Year Compilation of Advanced Research. Amsterdam, Netherlands: Elsevier. ISBN 0-444-50002-2
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.