joxin-Intersections

I made the lines spin.

Have fun playing 🙂

Here is how my code works:

  • each time the mouse clicks,
    • a new set of 12 lines are created randomly.
  • in each frame,
    • all the lines rotate.
    • a new set intersections are found according to the current lines.
    • everything is drawn.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// reference: Paul Bourke (http://paulbourke.net/geometry/pointlineplane/)
 
var lines = [];
var intersections = [];
const n = 12;
const speed = 5000;
 
function setup() {
  createCanvas(720, 480);
  background(255, 230, 230);
  mousePressed();
}
 
function draw() {
  background(255, 230, 230);
  intersections = [];
  for (var i = 0; i < lines.length; i++) {
    for (var j = 0; j < i; j++) {
      var inter = intersection(lines[i], lines[j]);
      if (inter != null) {
        intersections.push(inter);
      }
    }
  }
  drawAll(intersections, lines);
}
 
function mousePressed() {
  lines = [];
  for (var i = 0; i < n; i++) { 
      var x = random(150, width-150); 
      var y = random(100, height-100); 
      var angle = random(0, 360)/360 * 2*PI; 
      var magnitude = 300; 
      var newLine = {x: x, y: y, a: angle, m: magnitude}; 
      lines.push(newLine); 
  } 
} 
 
function intersection(l1, l2) { 
    var offset = map(millis() % speed, 0, speed, 0, 2*PI); 
    var x1 = l1.x + l1.m*cos(l1.a + offset)/2; 
    var y1 = l1.y + l1.m*sin(l1.a + offset)/2; 
    var x2 = l1.x - l1.m*cos(l1.a + offset)/2; 
    var y2 = l1.y - l1.m*sin(l1.a + offset)/2; 
    var x3 = l2.x + l2.m*cos(l2.a + offset)/2; 
    var y3 = l2.y + l2.m*sin(l2.a + offset)/2; 
    var x4 = l2.x - l2.m*cos(l2.a + offset)/2; 
    var y4 = l2.y - l2.m*sin(l2.a + offset)/2; 
    var denom = (y4-y3) * (x2-x1) - (x4-x3) * (y2-y1); 
    var noma = (x4-x3) * (y1-y3) - (y4-y3) * (x1-x3); 
    var nomb = (x2-x1) * (y1-y3) - (y2-y1) * (x1-x3); 
    if (denom != 0) { 
      var ua = noma/denom; 
      var ub = nomb/denom; 
      if (ua > 0 && ua < 1 && ub > 0 && ub < 1) {
        var inters = {x: x1 + ua * (x2 - x1), y: y1 + ua * (y2 - y1)};
        return inters;
    }
  }
  return null;
}
 
function drawAll(intersections, lines) {
  fill(255);
  noStroke();
  for (var i = 0; i < intersections.length; i++) {
    var p = intersections[i];
    ellipse(p.x, p.y, 20);
  }
 
  fill(0);
  stroke(100, 150);
  strokeWeight(2);
  var offset = map(millis() % speed, 0, speed, 0, 2*PI);
  for (var j = 0; j < lines.length; j++) {
    var l1 = lines[j];
    var x1 = l1.x + l1.m*cos(l1.a + offset)/2;
    var y1 = l1.y + l1.m*sin(l1.a + offset)/2;
    var x2 = l1.x - l1.m*cos(l1.a + offset)/2;
    var y2 = l1.y - l1.m*sin(l1.a + offset)/2;
    line(x1, y1, x2, y2);
  }
}