Created
January 7, 2017 00:45
-
-
Save jkwok91/ba43bc423f16daec6299938ee4af198a to your computer and use it in GitHub Desktop.
im so fuckin' _dangerously defensive_. bite me.
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
// ulam spiral leggo | |
var start; | |
var N; | |
var sideLen; | |
function setup() { | |
createCanvas(500,500); | |
background(0); | |
sideLen = 20; | |
N = 401; | |
rectMode(CENTER); | |
start = createVector(width/2, height/2); | |
noLoop(); | |
} | |
function draw() { | |
var loopsAround = 0; | |
// how the fuck do i draw a spiral | |
// this was a programming question that i once failed | |
// this is taking me absurdly long | |
drawSq(start.x, start.y, 1); | |
for (var i = 2; i < N; i++) { | |
var nextLargestSq = Math.ceil(Math.sqrt(i)); | |
var spiralSide = nextLargestSq%2 == 0 ? nextLargestSq+1 : nextLargestSq; | |
var tier = Math.floor(spiralSide/2); // integer diviz? | |
var numPerSide = spiralSide-1; | |
var prevSpiralSide = 2*tier - 1; | |
var thisTierStart = Math.pow(prevSpiralSide, 2) + 1; | |
//console.log("i", i, "spiralside", spiralSide, "tier", tier, "number per side in this spiralside", numPerSide, "previous spiral side length", prevSpiralSide, "this tier starts at",thisTierStart); | |
// these names are horrible. i am truly sorry. | |
var sideIdx = ((i - thisTierStart)%numPerSide) + 1; | |
var relSideIdx = sideIdx - tier; | |
var side = Math.floor((i - thisTierStart)/numPerSide)+1; | |
var dx, dy; | |
// giant switch statement? lol | |
if (side == 1) { | |
dx = tier; | |
dy = -1*relSideIdx; | |
} else if (side == 2) { | |
dx = -1*relSideIdx; | |
dy = -1*tier; | |
} else if (side == 3) { | |
dx = -1*tier; | |
dy = relSideIdx; | |
} else { | |
dx = relSideIdx; | |
dy = tier; | |
} | |
var coorx = start.x + dx * sideLen; | |
var coory = start.y + dy * sideLen; | |
drawSq(coorx, coory, i); | |
} | |
} | |
function drawSq(x, y, num) { | |
// check properties of num and color accordingly | |
var rectColor = color(0,0,0); | |
if (isPrime(num)) { | |
rectColor = color(200,200,0); | |
} | |
fill(rectColor); | |
stroke(255); | |
rect(x, y, sideLen, sideLen); | |
fill(255); | |
noStroke(); | |
textSize(10); | |
textAlign(CENTER, CENTER); | |
var num = "" + num; | |
text(num, x, y); | |
} | |
function isPrime(num) { | |
// yeah fuck you too this part isn't the point of this project | |
// #dangerouslyDefensive | |
if (num == 1) { return false; } | |
for (var i = 2; i <= Math.sqrt(num); i++) { | |
if (num%i == 0) { | |
return false; | |
} | |
} | |
return true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment