Probably the most important thing to remember about rotation is the following: First translate, then rotate. I will say it again. First translate, then rotate. When you get unexpected results from a rotate() command, it is usually because you forgot to translate first, so your shape flies off the display window where you can't see it anymore.
Here's another example of a program that uses scale(), translate(), and rotate().
Example 5.11 Gear program
//interlocking gears
float x = 100;
float y = 100;
float gearAngle1 = 0;
float gearAngle2 = 0;
float gearAngle3 = 0;
void setup(){
size(400,300);
}
void draw(){
background(10,10,247);
smooth();
pushMatrix();
translate(x,y);
rotate(gearAngle1);
gear(0,0);
popMatrix();
gearAngle1 += .01;
pushMatrix();
translate(x+125,y+20);
rotate(gearAngle2);
scale(2);
gear(0,0);
popMatrix();
gearAngle2 -=.005;
pushMatrix();
translate(x+133,y+135);
rotate(gearAngle3);
scale(0.75);
gear(0,0);
popMatrix();
gearAngle3 +=.015;
}
void gear(float x, float y) {
pushMatrix();
translate(x,y);
stroke(247,117,10,120);
fill(247,200,10);
ellipse(0,0,30,30);
for (int i = 0; i < 12; i++) {
strokeWeight(5);
rotate(PI/6);
line(0,0,30,30);
}
popMatrix();
}
Screenshot of gear program above.
E. Richardson