Created
October 11, 2013 01:57
-
-
Save scowalt/6928512 to your computer and use it in GitHub Desktop.
Processing "glowing" mandelbrot fractal example SIGMusic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment