GIF:
var lineNum = 12;//change this number to get more lines var lineSets = []; function setup() { createCanvas(720, 480); lineGenerator(); } function draw() { background(255); for (var j = 0; j < lineNum; j++){ var x1 = lineSets[j][0]; var y1 = lineSets[j][1]; var x2 = lineSets[j][2]; var y2 = lineSets[j][3]; line(x1, y1, x2, y2); for (var s = 0; s < lineNum; s++){ var x3 = lineSets[s][0]; var y3 = lineSets[s][1]; var x4 = lineSets[s][2]; var y4 = lineSets[s][3]; if (intersect(x1, y1, x2, y2, x3, y3, x4, y4) != false){ var cCenter = intersect(x1, y1, x2, y2, x3, y3, x4, y4); fill("pink"); ellipse(round(cCenter[0]), round(cCenter[1]), 10); } } } text("Number of Lines:" + lineNum, 10 ,20); text("* Up/Down Key to Increase/Decrease *", 10 ,35); } function mousePressed() { lineGenerator(); } function keyPressed() { if (keyCode === UP_ARROW) { lineNum += 1; lineGenerator(); } else if (keyCode === DOWN_ARROW) { lineNum -= 1; lineGenerator(); } } function lineGenerator(){ lineSets = []; for (var i = 0; i < lineNum; i++){ var x1 = round(random(0,width+1)); var y1 = round(random(0,height+1)); var x2 = round(random(0,width+1)); var y2 = round(random(0,height+1)); lineSets[i] = [x1, y1, x2, y2] } } // taken and modified from http://paulbourke.net/geometry/pointlineplane/javascript.txt // line intercept math by Paul Bourke http://paulbourke.net/geometry/pointlineplane/ // Determine the intersection point of two line segments // Return FALSE if the lines don't intersect function intersect(x1, y1, x2, y2, x3, y3, x4, y4) { // Check if none of the lines are of length 0 if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) { return false } var denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)) // 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 < 0 || ua > 1 || ub < 0 || ub > 1) { return false } // Return a object with the x and y coordinates of the intersection var x = x1 + ua * (x2 - x1) var y = y1 + ua * (y2 - y1) return [x, y] } |