xxxxxxxxxx
74
/*
// Intersection mathematics by Paul Bourke
http://www-cs.ccny.cuny.edu/~wolberg/capstone/intersection/Intersection%20point%20of%20two%20lines.html
*/
var nSegments = 12;
var segments = [];
function setup() {
createCanvas(400, 400);
makeNewArrangement();
}
function draw() {
background(220);
stroke(0);
for (var i = 0; i < nSegments; i++) {
segments[i].render();
}
for (var i = 0; i < nSegments; i++) {
var x1 = segments[i].xa;
var y1 = segments[i].ya;
var x2 = segments[i].xb;
var y2 = segments[i].yb;
for (var j = 0; j < i; j++) {
var x3 = segments[j].xa;
var y3 = segments[j].ya;
var x4 = segments[j].xb;
var y4 = segments[j].yb;
var denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
var ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denom;
var ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denom;
if ((ua >= 0) && (ua <= 1) &&
(ub >= 0) && (ub <= 1)) {
var px = x1 + ua * (x2 - x1);
var py = y1 + ua * (y2 - y1);
ellipse(px, py, 6, 6);
}
}
}
}
function mousePressed() {
makeNewArrangement();
}
function makeNewArrangement() {
for (var i = 0; i < nSegments; i++) {
segments[i] = new LineSegment(
random(0, width),
random(0, height),
random(0, width),
random(0, height)
);
}
}
class LineSegment {
constructor(xa, ya, xb, yb) {
this.xa = xa;
this.ya = ya;
this.xb = xb;
this.yb = yb;
}
render() {
line(this.xa, this.ya, this.xb, this.yb);
}
}