Last active
March 29, 2018 20:42
-
-
Save leocb/248a635ff73bae91939aaf728ae2152c to your computer and use it in GitHub Desktop.
Detect if two lines are intersecting in javascript, if so, return the coordinates of the intersection. Original code in C by Paul Bourke
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 | |
} | |
denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)) | |
// Lines are parallel | |
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 | |
// 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 | |
let x = x1 + ua * (x2 - x1) | |
let y = y1 + ua * (y2 - y1) | |
return {x, y} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment