Instantly share code, notes, and snippets.

# StefanPetrick/golden spiral

Last active August 29, 2015 14:16
Show Gist options
• Save StefanPetrick/d00bff9c90e28f16c44d to your computer and use it in GitHub Desktop.
golden spiral
This file contains 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
 int width = 300; // crop window resolution int height = 550; int centerX = int(width * 0.72); // precalculated centre of the spiral int centerY = int(height * 0.72); float e = 2.71828; // Eulers number void setup() { // just relevant for Processing size(width, height); background(255); } void draw() { float oldx = centerX; // start from the centre float oldy = centerY; boolean visible = true; // draw just every second line // angle from 0 to more than 8*pi means a bit more than 4 complete rounds // otherwise it would end at the height of centerY - but we need a bit more to fill the window // set here also the stepwidth for the dashed line for (float i = 0; i < 25.5 ; i = i + 0.1) { // calculate the relative distance from center float length = pow(e, 0.30635 * i); // rule for a Fibonacci spiral // those magic numbers scale the lenght into any rectangle // (difficult to explain - just try it out - it works fine with any aspect ratio) float lenghtX = width * length / 3200; float lenghtY = height * length / 2000; // calculate absolute position of pixels based on a Lissajous formula float x = centerX + (cos(i) * lenghtX * -1); float y = centerY + (sin(i) * lenghtY ); // draw only visible lines if (visible) { line(x, y, oldx, oldy); } // change drawing mode visible = !visible; // save last point oldx = x; oldy = y; } }