Lecture 06
Topics
- Motion:
- Circular Motion
- Lissajous Figures
- Interpolated Motion
- Drunk Walk
And
- Interaction
- Mouse Interaction
- Keyboard Interaction
- State Machines
- booleans that govern display conditions
- Functional Abstraction
Homework (due Monday October 8):
- Clicker Square exercises
- Rubber Stamp exercises
- Abstract Clock artwork
Circular Motion:
// Circular motion
void setup() {
size(300, 300);
}
void draw() {
smooth();
// comment or uncomment background to leave trails.
//background(127);
float centerX = 150;
float centerY = 150;
float amplitude = 50.0;
float period = 0.003;
// Circular motion linked to the (time-varying) millis() function.
// Note that millis() gets large fast (1000 per second!),
// so we have to multiply it by a small number to work well.
float xPos = centerX + amplitude * sin(millis()*period);
float yPos = centerY + amplitude * cos(millis()*period);
ellipse(xPos, yPos, 20, 20);
}
// Lissajous figures
void setup(){
size(300,300);
}
void draw(){
smooth();
//background(127);
float centerX = 150;
float amplitudeX = 100.0;
float amplitudeY = 100.0;
float periodX = 0.003;
float periodY = periodX * 3.0; // try different ratios!
float xPos = centerX + amplitudeX * sin(millis()*periodX);
float yPos = centerX + amplitudeY * cos(millis()*periodY);
ellipse(xPos, yPos, 20,20);
}
Interpolated Motion:
// Zeno's interpolated motion
float xPos;
float yPos;
void setup(){
size(300,300);
xPos = width/2;
yPos = height/2;
}
void draw(){
// on each frame, move 5% towards the target (mouse) in X,
// and move 2% towards the target (mouse) in Y
xPos = 0.95*xPos + 0.05*mouseX;
yPos = 0.98*yPos + 0.02*mouseY;
ellipse(xPos, yPos, 20,20);
}
Drunk Walk:
// Drunk walk! A random offset on each frame.
// It creates a feedback, using the global variables xPos and yPos:
// Their current values are related to their previous values.
float xPos;
float yPos;
void setup(){
size(300,300);
xPos = width/2;
yPos = height/2;
}
void draw(){
background(127);
// my current position is a small random offset from my previous position.
xPos = xPos + random(-3,3);
yPos = yPos + random(-3,3);
ellipse(xPos, yPos, 20,20);
}
Back and Forth Linear Motion:
// back-and-forth motion
float xPos;
float myDirection = 1;
void setup() {
size(300,300);
xPos = 0;
}
void draw() {
background(255);
fill(255,0,0);
float mySpeed = mouseX / 100.0;
xPos = xPos + myDirection * mySpeed;
if (xPos > width){
myDirection = -1;
}
if (xPos < 0){
myDirection = 1;
}
ellipse(xPos, 150, 40,40);
}