Description
create a generative typography/text output
Process:
I originally started with making a speedometer, but found this idea more fun and interactive so went along with it.
It took a lot of maths! I started with a rough circle/ellipse for a path for my text to go about. Then I created the variable “arclength” to trace the text on the the circular path. Then I iterated the arclength with each letter of the string and divided it by 2 to make it monospaced on an average.
I then created a variable theta for every angle of the letter of the string. Then through push and pop, I copied the translate and rotate coordinates of the text and pasted it again. Through mouseX function, the arc moved sideways along with the mouse.
Challenges:
There was a little math, which was a bit challenging for me. But once it worked, it was fun to interact with. Initially, I used TWO_ PI as stop 2 value in map in translate, which gave it a 2D effect being the original plan. Then by just switching it to PI, the wheel switched to being 3D and it was fun so I let it be.
Here’s the video link to the assignment:
Code:
String message;
PFont f;
float r = 300;// The radius of a circle
void setup() {
size(800,800);
// The message to be displayed
message = "Steering wheel of the your car Steering wheel of your car Steering wheel of your car Steering wheel of your car Steering wheel of your car"; //Speed of your wheels Speed of your wheels Speed of your wheels ";
// The text must be centered!
textAlign(CENTER);
f = createFont("Serif",32);
textFont(f);
textSize(36);
}
void draw() {
background(#98EAF7);
// Start in the center and draw the circle
translate(width / 2, height / 2);
//noFill();
//stroke(0);
//ellipse(0, 0, r*2, r*2);
// We must keep track of our position along the curve
int arclength = 0;
// For every letter
for (int i = 0; i < message.length(); i++)
{
float w = textWidth(message.charAt(i));
arclength += w/2;
float theta = PI + arclength / r;
push();
translate(r*cos(theta + map(mouseX, 0, width, 0, PI)), r*sin(theta+map(mouseX, 0, width, 0, TWO_PI)));
rotate(theta+PI/2 +map(mouseX, 0, width, 0, TWO_PI)); // rotation is offset by 90 degrees
// Display the character
fill(0);
text(message.charAt(i),0,0);
pop();
// Move halfway again
arclength += w/2;
}
}
Nice job Shanaia, love the 3d effect!