## paukparl-Intersections

sketch:

gif:

```var NUM_LINES = 12; var LINE_LENGTH = 300; var ELLIPSE_SIZE = 20; var justClicked = true; var lines;   function setup() { createCanvas(720, 480); strokeWeight(2); fill('rgba(30,30,40, 0.9)'); }   function draw() { if (justClicked) {   // array refreshed upon click lines = [];   // redraw upon click background(100, 100, 110); for (var i=0; i&lt;NUM_LINES; i++) { drawRandLine(); } } justClicked = false; } // draw a random line function drawRandLine() { var randRotation = random(PI); var pointL = createVector( -LINE_LENGTH/2 * cos(randRotation), -LINE_LENGTH/2 * sin(randRotation) ); var pointR = createVector( LINE_LENGTH/2 * cos(randRotation), LINE_LENGTH/2 * sin(randRotation) ); if (randRotation &gt; PI/2) { var pointTemp = pointL.copy(); pointL = pointR; pointR = pointTemp; }   var randTransX = random(width); var randTransY = random(height); pointL.add(randTransX, randTransY); pointR.add(randTransX, randTransY);   stroke(255); line(pointL.x, pointL.y, pointR.x, pointR.y);   var newLine = [pointL, pointR]; checkIntersect(newLine); append(lines, newLine); }     // check for intersections between new line and existing ones function checkIntersect( lineB ) {   // go through lines already drawn on canvas for (var i=0; i&lt;lines.length; i++) { var lineA = lines[i];   // conduct Bourke intersection calculation var intersect = bourkeIntersect( lineA[0].x, lineA[0].y, lineA[1].x, lineA[1].y, lineB[0].x, lineB[0].y, lineB[1].x, lineB[1].y );   if (intersect) { print("INTERSECTED!\n"); noStroke(); ellipse(intersect.x, intersect.y, ELLIPSE_SIZE); } } }     // line intercept math by Paul Bourke http://paulbourke.net/geometry/pointlineplane/ // JS version by Leo Bottaro function bourkeIntersect(x1, y1, x2, y2, x3, y3, x4, y4) { var denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));   // if lines are parallel if (denominator === 0) { return false; }   var ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator; var ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;   // is the intersection along the segments if (ua &lt; 0 || ua &gt; 1 || ub &lt; 0 || ub &gt; 1) { return false; }   // if intersect return createVector(x1 + ua * (x2 - x1), y1 + ua * (y2 - y1)); }   function mousePressed() { justClicked = true; }```

## paukparl-IterationExercise

sketch:

gif:

```var justClicked; var gridSize;   function setup() { createCanvas(400, 400); justClicked = true; gridSize = width/10; fill(50); stroke(255); strokeWeight(3); }   function draw() { if (justClicked) {   // redraw background(100, 100, 108); for (var y = gridSize; y &lt; width; y += gridSize) { for (var x = gridSize; x &lt; height; x += gridSize) { var rand = random(); if (rand &lt; 0.05) { ellipse(x, y, 10); } else { ellipse(x, y, 20); } } }   justClicked = false; } }   function mousePressed() { justClicked = true; }```