# Week 4: 3D Steering wheel of a car

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
// 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;
}
}
```