# Follow 3

Follow 3 based on code from Keith Peters.

A segmented line follows the mouse. The relative angle from each segment to the next is calculated with atan2() and the position of the next is calculated with sin() and cos().

float[] x = new float[20]; float[] y = new float[20]; float segLength = 18; void setup() { size(640, 360); strokeWeight(9); stroke(255, 100); } void draw() { background(0); dragSegment(0, mouseX, mouseY); for(int i=0; i<x.length-1; i++) { dragSegment(i+1, x[i], y[i]); } } void dragSegment(int i, float xin, float yin) { float dx = xin - x[i]; float dy = yin - y[i]; float angle = atan2(dy, dx); x[i] = xin - cos(angle) * segLength; y[i] = yin - sin(angle) * segLength; segment(x[i], y[i], angle); } void segment(float x, float y, float a) { pushMatrix(); translate(x, y); rotate(a); line(0, 0, segLength, 0); popMatrix(); }

## Functions Used

**strokeWeight()**

Sets the width of the stroke used for lines, points, and the border around shapes

Learn More**draw()**

Called directly after setup(), the draw() function continuously executes the lines of code contained inside its block until the program is stopped or noLoop() is called

Learn More**atan2()**

Calculates the angle (in radians) from a specified point to the coordinate origin as measured from the positive x-axis

Learn More**background()**

The background() function sets the color used for the background of the Processing window

Learn More