Skip to content

Instantly share code, notes, and snippets.

@sasaki-shigeo
Created January 30, 2017 20:20
Show Gist options
  • Save sasaki-shigeo/52f5a12ce44d73834ef3dd47b3c1b699 to your computer and use it in GitHub Desktop.
Save sasaki-shigeo/52f5a12ce44d73834ef3dd47b3c1b699 to your computer and use it in GitHub Desktop.
Rose Curve Locus Animation
float sz;
int degree = 0;
int nthGraph = 0;
int waitTime = 60;
void setup() {
size(500, 500);
sz = 0.4 * width;
}
void draw() {
float r = 0;
float x = 0;
float y = 1;
background(#ffffff);
stroke(255, 0, 0);
translate(width/2, height/2);
scale(1, -1);
beginShape();
for (int i = 0; i < degree; i++) {
r = func(nthGraph, i);
x = sz * r * cos(radians(i));
y = sz * r * sin(radians(i));
vertex(x, y);
}
endShape();
ellipse(x, y, 4, 4);
if (degree < 360) {
degree++;
}
else if (waitTime > 0) {
waitTime--;
}
else {
degree = 0;
nthGraph++;
waitTime = 60;
}
}
float func(int n, int degree) {
switch (n % 5) {
case 0: return sin(radians(degree));
case 1: return sin(radians(2 * degree));
case 2: return sin(radians(3 * degree));
case 3: return sin(radians(4 * degree));
case 4: return sin(radians(5 * degree));
default: /* never reached */ return 0;
}
}
String expr(int n) {
switch (n % 5) {
case 0: return "r = sin(t)";
case 1: return "r = sin(2 * t)";
case 2: return "r = sin(3 * t)";
case 3: return "r = sin(4 * t)";
case 4: return "r = sin(5 * t)";
default: /* never reached */ return "";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment