Here's a bunch of pictures that rotate in a ring, like an old-fashioned camera shutter. For fun, they also get bigger as the ring gets bigger.
This program does a lot of work in just a few lines of text. By the end of the course, you'll know the how and why of every line, and you'll be able to write your own programs that do stuff like this (or entirely unlike this!).
PImage[] MyImages; // an array to hold all the images
String[] ImageFiles = { // paths to the photos we'll be using
"shutterpix/NZtrip.jpg", "shutterpix/NZtrip3.jpg",
"shutterpix/NZtrip2.jpg", "shutterpix/NZtrip4.jpg",
"shutterpix/NZtrip5.jpg"};
int Xsize = 600; // draw all pictures 600 pixels wide
int Ysize = 450; // draw all pictures 450 pixels high
int NumImages = 10; // how many photos to draw
void setup() {
size(Xsize, Ysize); // make a window the size of a photo
smooth();
MyImages = new PImage[ImageFiles.length]; // allocate the photo array
for (int i=0; i<ImageFiles.length; i++) {
MyImages[i] = loadImage(ImageFiles[i]); // and read in the photos
}
}
void draw() {
background(255);
float minScale = .05; // minimum and maximum scale for pictures
float maxScale = .3; // I played with this by hand until it looked good
float bigR = min(width, height)/2.0; // radius of the ring
float diagLen = mag(width/2, height/2); // half the diagonal of the window
float dx = mouseX - (width/2); // distance from the current mouse to
float dy = mouseY - (height/2); // the center of the window.
float d = mag(dx, dy)/diagLen; // 0: mouse is at center, 1: at corner
float scl = lerp(minScale, maxScale, d); // use d to find the scale factor
float trans = lerp(Ysize*scl, bigR-(Ysize*scl), d); // d is ring radius
float picAngle = atan2(dy, dx); // find the angle by which to rotate
for (int i=0; i<NumImages; i++) { // we're going to draw each image in turn
float angle = map(i, 0, NumImages, 0, TWO_PI); // angle to spin by
pushMatrix(); // save the coordinates
translate(width/2, height/2); // move to center
rotate(angle); // point Y-axis at next picture's center
translate(0, -trans); // move to the picture center
scale(scl); // scale the picture
rotate(picAngle); // rotate around this picture's center
image(MyImages[i%MyImages.length], -Xsize/2, -Ysize/2, Xsize, Ysize);
popMatrix(); // restore the coordinates
}
}