angle = random(1) * PI * 2;
originx = random(borders, width - borders);
originy = random(borders, height - borders);
append(lines, [round(originx), round(originy), round(originx + (cos(angle) * lineLength)), round(originy + (sin(angle) * lineLength))]);
for (var a = 0; a < lines.length; a++) {
for (var b = a; b < lines.length; b++) {
resultX = intersectX(lines[a][0], lines[a][1], lines[a][2], lines[a][3], lines[b][0], lines[b][1], lines[b][2], lines[b][3])
resultY = intersectY(lines[a][0], lines[a][1], lines[a][2], lines[a][3], lines[b][0], lines[b][1], lines[b][2], lines[b][3])
if (!(resultX < 0 || resultX > 1 || resultY < 0 || resultY > 1)) {
append(intersectsX, lines[a][0] + resultX * (lines[a][2] - lines[a][0]));
append(intersectsY, lines[a][1] + resultX * (lines[a][3] - lines[a][1]));
for (var j = 0; j < intersectsX.length; j++) {
ellipse(intersectsX[j], intersectsY[j], radius, radius);
for (var a = 0; a < lines.length; a++) {
line(lines[a][0], lines[a][1], lines[a][2], lines[a][3]);
function mouseClicked() {
function intersectX(x1, y1, x2, y2, x3, y3, x4, y4) {
return round((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));
function intersectY(x1, y1, x2, y2, x3, y3, x4, y4) {
return round((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));