gears
@author
float bigR = 100;
float smallR = 90;
float angleStep = 5;
float time = 0.0;
void setup(){
size(500, 500);
}
void draw(){
background(255);
translate(width / 2, height / 2);
float dist = bigR - (bigR - smallR) / 2;
drawGear(-dist, -dist, time);
drawGear(dist, -dist, -time + radians(angleStep));
drawGear(-dist, dist, -time + radians(angleStep));
drawGear(dist, dist, time);
time += map(sin(frameCount * 0.01), -1, 1, 0, PI / 64);
}
void drawGear(float x, float y, float rot){
pushMatrix();
translate(x, y);
rotate(rot);
noStroke();
fill(0);
beginShape();
float angle = 0;
boolean isBigger = true;
while(angle < 360){
float radian = radians(angle);
float radius = isBigger? bigR: smallR;
vertex(radius * cos(radian), radius * sin(radian));
angle += angleStep;
isBigger = !isBigger;
}
endShape(CLOSE);
fill(255);
ellipse(0, 0, 20, 20);
popMatrix();
}