// StringArt: Start of something fun
// First, lets just draw a line centered at cx, cy
// then rotate it by a delta
// Then, add the following incrementally
// Version 1: Drawing several lines by varying the angle
// version 2: Adding some noise to the line tilt angle
// version 3: Adding some noise to the radius (line length)
// Version 4: Add soem noise to center placement (jiggle the line)
// Version 5: Finishing touch: Vary StrokeColor
float cx, cy;
float lineLength, radius;
float theta, delta;
float angleNoise; // V2 Angle Noise
float radiusNoise; // V3 radius noise
float xNoise; // V4 center noise
float yNoise;
int strokeColor; // V5 Stroke Color changes
int strokeDelta;
void setup() {
size(500, 500);
smooth();
background(200);
// set up variables
cx = width/2;
cy = height/2;
lineLength = width-100;
radius = lineLength/2;
theta = random(360);
delta = 2; // V1: Add a delta change to angle
angleNoise = random(10); // V2 set initial value
radiusNoise = random(10); // V3 radius noise
xNoise = random(10); // V4 center noise
yNoise = random(10); // V4
strokeColor = 0; // V5 Stroke Color
strokeDelta = 1;
} // setup()
void draw() {
// compute angle by adding some Perlin Noise ---V2
angleNoise += 0.005;
theta = theta + noise(angleNoise)*6 - 3;
if (theta > 360) {
theta = theta - 360;
}
if (theta < 0) {
theta = theta + 360;
}
// compute the radius ----V3
radiusNoise += 0.005;
radius = noise(radiusNoise)*width/2;
// compute the center ---V4
xNoise += 0.01;
yNoise += 0.01;
cx = width/2 + noise(xNoise)*50 - 25;
cy = height/2 + noise(yNoise)*50 - 25;
// draw line
float angle = radians(theta);
float x1 = cx + radius * cos(angle);
float y1 = cy + radius * sin(angle);
float x2 = cx + radius * cos(angle+PI);
float y2 = cy + radius * sin(angle+PI);
//stroke(0);
// set its color etc. // V5
strokeColor += strokeDelta;
if (strokeColor > 255 || strokeColor < 0) {
strokeDelta = strokeDelta * -1;
}
stroke(strokeColor, 60);
line(x1, y1, x2, y2);
theta += delta; // Increment angle by delta
} // draw()