Many WikiHow tutorials include illustrations to accompany the text. I found an illustration of a man on the article “How to Tell Someone to Stop Flirting With You” that I thought would be suitable to animate. I animated many instances of this man at two scales to create a multiplicity of men. The scene is at once relaxing and monotonous. The man’s expression suggests intense focus, even passion. A reinforcing feedback loop only strengthens his commitment to the task at hand.
PImage man;
PVector manSize;
float ang = 0;
int numMediumMen = 30;
int numBigMen = 35;
PImage[] mediumMen = new PImage[numMediumMen];
PImage[] bigMen = new PImage[numBigMen];
PVector[] smallMenPos = new PVector[numSmallMen];
PVector[] mediumMenPos = new PVector[numMediumMen];
PVector[] bigMenPos = new PVector[numBigMen];
float[] smallMenVel = new float[numSmallMen];
float[] mediumMenVel = new float[numMediumMen];
float[] bigMenVel = new float[numBigMen];
void initializeMen() {
int startX = -100;
for(int j = 0; j < numMediumMen; j++) {
int y = height/5 + (int)random(80);
int x = j * (int)manSize.x + startX;
mediumMen[j] = loadImage("him.png");
mediumMenPos[j] = new PVector(x,y);
mediumMenVel[j] = random(-j/2,j/2);
}
for(int k = 0; k < numBigMen; k++) {
int y = -width/10 + (int)random(80);
int x = k * (int)manSize.x + startX*6;
bigMen[k] = loadImage("him.png");
bigMen[k].resize((int)manSize.x*6,(int)manSize.y*6);
bigMenPos[k] = new PVector(x,y);
bigMenVel[k] = random(-k/5,k/5);
}
}
void setup() {
size(1500, 1500);
man = loadImage("him.png");
manSize = new PVector(man.width/2,man.height/2);
initializeMen();
}
void draw() {
if(frameCount > 12) noLoop();
saveFrame();
ang += TWO_PI/10.0;
background(255);
tint(255,180);
translate(-300,0);
for(int k = numBigMen - 1; k >= 0; k--) {
image(bigMen[k],bigMenPos[k].x,bigMenPos[k].y);
bigMenPos[k].y += bigMenVel[k]*sin(ang);
}
tint(255);
for(int j = numMediumMen - 1; j >= 0; j--) {
float pulseAmt = float(j)/float(numMediumMen)*.15;
mediumMenPos[j].y += mediumMenVel[j]*sin(ang);
mediumMenPos[j].x += mediumMenVel[j]*sin(ang);
image(mediumMen[j],mediumMenPos[j].x,mediumMenPos[j].y,mediumMen[j].width*((sin(ang)*pulseAmt)+.95),mediumMen[j].height*((sin(ang)*pulseAmt)+1.5));
}
}