sketch
// SEAN CHEN
// 15-104 A
var nPoints = 100;
var tx = []; // keeping track of the x y of each hypotrochoid
var ty = [];
var rot = 0; // rot init
var size = []; // each size
var col = []; // each color
function setup() {
createCanvas(480, 480);
background(255);
}
function distance() { // distance from center to mouse
var d = dist(width/2, height/2, mouseX, mouseY);
return d;
}
function hypotrochoid(a, col) {
push();
fill(col);
var x, y, a, b, t;
b = a / int(map(distance(), 0, width/2, 1, a));
stroke(0);
rotate(radians(rot));
beginShape();
for (var i = 0; i < nPoints; i++) {
t = map(i, 0, nPoints, 0, TWO_PI);
x = (a - b) * cos(t) - b * cos((a-b) / b * t);
y = (a - b) * sin(t) + b * sin((a-b) / b * t);
vertex(random(3)+x, random(3)+y);
}
endShape(CLOSE);
pop();
}
function draw() {
background(255);
rect(0, 0, 480, 480);
push();
translate(width/2, height/2); // initial hypotrochoid
hypotrochoid(120, color(245,211,114));
pop();
for (var i = 0; i < tx.length; i++) { // added hypotrochoid
push();
translate(tx[i], ty[i]);
hypotrochoid(size[i], col[i]);
pop();
}
rot += 1;
text("click to add!", 10, 20);
}
function mouseClicked() { // add new hypotrochoid
tx.push(mouseX); // input new at mouseXY
ty.push(mouseY);
size.push(random(50, 200));
col.push(color(random(255),211,114));
if (tx.length > 12) { // delete after 12
tx.shift();
ty.shift();
size.shift();
col.shift();
}
}