Clean up intersection implementation and handle divide-by-0

This commit is contained in:
Shaunak Kishore
2015-09-10 01:53:09 -04:00
parent bc1e5f7a6c
commit 8e71c12f9e

View File

@ -305,10 +305,13 @@ function extract_stroke(paths, endpoint_map, bridge_adjacency,
function get_intersection(segment1, segment2) {
var diff1 = Point.subtract(segment1[1], segment1[0]);
var diff2 = Point.subtract(segment2[1], segment2[0]);
var s = (diff1[0]*(segment1[0][1] - segment2[0][1]) - diff1[1]*(segment1[0][0] - segment2[0][0]))/(diff1[0]*diff2[1] - diff1[1]*diff2[0]);
var t = (diff2[0]*(segment1[0][1] - segment2[0][1]) - diff2[1]*(segment1[0][0] - segment2[0][0]))/(diff1[0]*diff2[1] - diff1[1]*diff2[0]);
var cross = diff1[0]*diff2[1] - diff1[1]*diff2[0];
if (cross === 0) {
return undefined;
}
var v = Point.subtract(segment1[0], segment2[0]);
var s = (diff1[0]*v[1] - diff1[1]*v[0])/cross;
var t = (diff2[0]*v[1] - diff2[1]*v[0])/cross;
if (0 < s && s < 1 && 0 < t && t < 1) {
return [segment1[0][0] + t*diff1[0], segment1[0][1] + t*diff1[1]];
}