INSPIRATION
I created this piece to demonstrate how relatively easy to fall into old habits and spiral downward and, on the flip side, how difficult it is to recover, relapse, and then get clean again.
PROCESS
First I made these two sentences exploded. With every DOWN key pressed, the alphabets move faster and it gets darker until it’s completely pitch black.
Then, if you start clicking the UP button, the background begins to get brighter and the alphabets begin to shrink. Until it suddenly cuts to black, and then it brightens up, with the words too small to register.
DEMO
CODES
// a string of text
String s = "stupid mistake ";
String t = "why did you do?";
// declare an array of Circle objects, called letters
// set it to be the same size as the length of the String
Letter letters[] = new Letter[s.length()];
Letter letters1[] = new Letter[t.length()];
PFont f;
int fontSize = 25;
int bg = 255;
void setup(){
size(450, 450);
f = createFont("Skia-Regular_Black-Extended", 25);
textFont(f);
// radius of the circle of letters
int radius = 50;
int radius1 = 75;
// start the words halfway around the circle
// (left side. normally in processing circles, angles, and rotations
// start on the right side)
float startingAngle = PI;
// where is the center of the circle
float circleCenterX = width/2;
float circleCenterY = height/2;
// loop through all the characters in the String
for (int i =0; i<s.length();i++){
// the get the angle using i as a multiplier
float angle = startingAngle + i*TWO_PI/s.length();
// cosine of an angle equals adjacent/hypoteneuse
// thus: cos(angle) = x/radius
// and algebra: x = cos(angle)*radius
float x = cos(angle)*radius + circleCenterX+random(-2, 2)*noise(frameCount*.01);
// y is same but sine
float y = sin(angle)*radius + circleCenterY+random(-2, 2)*noise(frameCount*.01);
//make a new Circle object for each letter
letters[i] = new Letter(x, y, s.charAt(i));
}
for (int l =0; l<t.length();l++){
// the get the angle using i as a multiplier
float angle = startingAngle + l*TWO_PI/t.length();
// cosine of an angle equals adjacent/hypoteneuse
// thus: cos(angle) = x/radius
// and algebra: x = cos(angle)*radius
float x1 = cos(angle)*radius1 + circleCenterX;
// y is same but sine
float y1 = sin(angle)*radius1 + circleCenterY;
//make a new Circle object for each letter
letters1[l] = new Letter(x1, y1, t.charAt(l));
}
}
void draw(){
background(bg);
textSize(fontSize);
// loop through the letters array and call all needed functions
for (int i =0; i<s.length();i++){
letters[i].update();
letters[i].display();
letters[i].checkEdges();
letters1[i].update();
letters1[i].display();
letters1[i].checkEdges();
}
}
// when the down and up key is pressed assign a random x & y speed and changes background color
void keyPressed(){
if (key == CODED && keyCode == DOWN){
for (int i =0; i<s.length();i++){
letters[i].xSpeed = random(-5*i,5)*noise(frameCount*.01+i*0.01);
letters[i].ySpeed = random(-5,5*i)*noise(frameCount*.01+i*0.01);
letters1[i].xSpeed = random(-5,5*i)*noise(frameCount*.01+i*0.01);
letters1[i].ySpeed = random(-5*1,5)*noise(frameCount*.01+i*0.01);
}
fontSize += 25;
bg -=20;
if (bg<30){
bg = 0;
}
}
else if (key == CODED && keyCode == UP){
for (int i =0; i<s.length();i++){
letters[i].xSpeed = random(-5/(i+1),5/(i+1))*noise(frameCount*.01+i*0.01);
letters[i].ySpeed = random(-5/(i+1),5/(i+1))*noise(frameCount*.01+i*0.01);
letters1[i].xSpeed = random(-5/(i+1)/(i+1),5)*noise(frameCount*.01+i*0.01);
letters1[i].ySpeed = random(-5/(i+1),5/(i+1))*noise(frameCount*.01+i*0.01);
}
if (bg <255){
bg += 10;
}
else {
bg = 255;
}
if(fontSize >=5){
fontSize -= 10;
}
else {
fontSize = 1;
}
}
}
class Letter {
float x, y;
float xSpeed, ySpeed;
char letter;
int fontSize;
Letter(float _x, float _y, char _c) {
x = _x;
y = _y;
xSpeed = ySpeed = 0;
letter = _c;
}
void update() {
x += xSpeed;
y += ySpeed;
xSpeed *= .90;
ySpeed *= .90;
}
void display() {
fill(0);
text(letter,x,y);
}
void checkEdges() {
if (y>height) {
y=0;
}
if (y<0) {
y=height;
}
if (x>width) {
x=0;
}
if (x<0) {
x=width;
}
}
}



