Skip to content

Instantly share code, notes, and snippets.

@scowalt
Created October 11, 2013 01:57

Revisions

  1. scowalt created this gist Oct 11, 2013.
    80 changes: 80 additions & 0 deletions sketch.pde
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,80 @@
    // http://processing.org/examples/mandelbrot.html


    // Establish a range of values on the complex plane
    // A different range will allow us to "zoom" in or out on the fractal
    // float xmin = -1.5; float ymin = -.1; float wh = 0.15;
    float xmin = -3;
    float ymin = -1.25;
    float w = 5;
    float h = 2.5;

    void setup() {
    size(640, 360);
    background(255);
    frameRate(60);
    }

    float it = 0;
    float increment = 0.005;
    void draw() {
    // Make sure we can write to the pixels[] array.
    // Only need to do this once since we don't do any other drawing.
    loadPixels();

    // Have the fractal fade in and out
    it = (it + increment);
    if (it >= 0.5 || it <= 0.0)
    increment = increment * -1;

    // Maximum number of iterations for each point on the complex plane
    int maxiterations = 100;

    // x goes from xmin to xmax
    float xmax = xmin + w;
    // y goes from ymin to ymax
    float ymax = ymin + h;

    // Calculate amount we increment x,y for each pixel
    float dx = (xmax - xmin) / (width);
    float dy = (ymax - ymin) / (height);

    // Start y
    float y = ymin;
    for (int j = 0; j < height; j++) {
    // Start x
    float x = xmin;
    for (int i = 0; i < width; i++) {

    // Now we test, as we iterate z = z^2 + cm does z tend towards infinity?
    float a = x;
    float b = y;
    int n = 0;
    while (n < maxiterations) {
    float aa = a * a;
    float bb = b * b;
    float twoab = 2.0 * a * b;
    a = aa - bb + x;
    b = twoab + y;
    // Infinty in our finite world is simple, let's just consider it 16
    if (aa + bb > 16.0) {
    break; // Bail
    }
    n++;
    }

    // We color each pixel based on how long it takes to get to infinity
    // If we never got there, let's pick the color black
    if (n == maxiterations) {
    pixels[i+j*width] = color(0);
    }
    else {
    // Gosh, we could make fancy colors here if we wanted
    pixels[i+j*width] = color(it*n*16 % 255, 0, 0);
    }
    x += dx;
    }
    y += dy;
    }
    updatePixels();
    }