Skip to content

Instantly share code, notes, and snippets.

@jkwok91
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jkwok91/2e781dd1570a68c5aa35 to your computer and use it in GitHub Desktop.
Save jkwok91/2e781dd1570a68c5aa35 to your computer and use it in GitHub Desktop.
a cube acting strange
/*
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));
}
}
@jkwok91
Copy link
Author

jkwok91 commented Apr 24, 2014

edited the placement of red/cyan lines

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment