-
-
Save jkwok91/2e781dd1570a68c5aa35 to your computer and use it in GitHub Desktop.
a cube acting strange
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
/* | |
a cube acting strange | |
*/ | |
Square r1; | |
void setup() { | |
size(300, 300); | |
noFill(); | |
r1 = new Square(new PVector(3*width/8, 3*height/8), width/4); | |
} | |
void draw() { | |
background(0); | |
r1.twitch(); | |
} | |
void mousePressed() { | |
r1.stereoOn = !(r1.stereoOn); | |
} | |
class Square { | |
PVector[] corners; | |
int side; | |
PVector[] cubeCorners; | |
float theta; | |
boolean stereoOn; | |
Square(PVector p, int s) { | |
stereoOn = false; | |
side = s; | |
corners = new PVector[4]; | |
corners[0] = p; | |
corners[1] = new PVector(p.x, p.y+side); | |
corners[2] = new PVector(p.x+side, p.y+side); | |
corners[3] = new PVector(p.x+side, p.y); | |
theta = random(0, TWO_PI); | |
PVector offset = new PVector(side/2*cos(theta), side/2*sin(theta)); | |
cubeCorners = getProj(corners, offset); | |
} | |
PVector[] getProj(PVector[] existing, PVector offset) { | |
PVector[] set = new PVector[4]; | |
for (int i = 0; i < set.length; i++) { | |
set[i] = PVector.add(existing[i], offset); | |
} | |
return set; | |
} | |
void twitch() { | |
theta += 0.005; | |
float n = map(noise(theta), 0, 1, 0, TWO_PI); | |
PVector offset = new PVector(side/2*cos(n), side/2*sin(n)); | |
cubeCorners = getProj(corners, offset); | |
display(); | |
if (stereoOn) { | |
stereo(offset); | |
} | |
} | |
void connect(PVector[] set, color c) { | |
stroke(c); | |
for (int i = 0; i < set.length; i++) { | |
PVector c0 = set[i]; | |
PVector c1 = set[(i+1)%set.length]; | |
line(c0.x, c0.y, c1.x, c1.y); | |
} | |
for (int i = 0; i < corners.length; i++) { | |
PVector c1 = corners[i]; | |
PVector c2 = set[i]; | |
line(c1.x, c1.y, c2.x, c2.y); | |
} | |
} | |
void stereo(PVector offset) { | |
PVector[] red = getProj(corners, new PVector(offset.x-3,offset.y+1)); | |
PVector[] blue = getProj(corners, new PVector(offset.x+3,offset.y-1)); | |
connect(red, color(255, 0, 0)); | |
connect(blue, color(0, 255, 255)); | |
} | |
void display() { | |
rectMode(CORNERS); | |
stroke(255); | |
rect(corners[0].x, corners[0].y, corners[2].x, corners[2].y); | |
connect(cubeCorners, color(255)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
edited the placement of red/cyan lines