nixel-Intersections

let lines = [];
let slider;
let intersectionsArray = [];
let intersection = [];
 
function setup() {
  createCanvas(720, 480);
  background(255, 204, 0);
 
  slider = createSlider(12, 100, 12);
  slider.position(50, 80);
  stroke(0,0,255);
  textSize(15);
  text('click to begin', width/2,height/2);
}
 
function mousePressed(){
 
  intersectionsArray = [];
  lines = [];
  background(255, 204, 0);
  var lineNumber = slider.value();
 
  for (var i = 0; i < lineNumber; i++){
    var newLine = new Line(random(50,width-100), random(50, height-100), random(50,width-100), random(50, height-100));
    lines.push(newLine);  
  }
 
 
  for (i = 0; i < lines.length-1; i++){
   for (var j = 1; j < lines.length; j++) {
     if (lines[i] !== lines[j]){
      intersection = (intersect(lines[i].x1, lines[i].y1, lines[i].x2, lines[i].y2, lines[j].x1, lines[j].y1, lines[j].x2, lines[j].y2));
     }
     if (intersection !== false && intersectionsArray.includes(intersection) == false){
       intersectionsArray.push(intersection);
      }
     }    
  }
  fill(255,0,0,50);
  text('number of lines:', 50,70);
  text(lines.length, 170,70);
  for (let l of lines){
    l.drawLine();
  }
 
  for (i = 0; i < intersectionsArray.length; i++) {
    ellipse(intersectionsArray[i][0], intersectionsArray[i][1],15);
  }
}
 
 
class Line {
  constructor(x1, y1, x2, y2){
    this.x1 = x1;
    this.y1 = y1;
    this.x2 = x2;
    this.y2 = y2;
 }
  drawLine(){
    line (this.x1, this.y1, this.x2, this.y2);
  } 
}
 
 
//intersection calculations from paul bourke and leo bottaro
function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {
 
  if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {
    return false;
	}
 
  denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));
 
  if (denominator === 0) {
    return false;
	}
 
  let ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;
  let ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;
 
  if (ua < 0 || ua > 1 || ub < 0 || ub > 1) {
    return false;
	}
 
  let x = x1 + ua * (x2 - x1);
  let y = y1 + ua * (y2 - y1);
 
  return [x, y]
}