mirror of
https://github.com/skishore/makemeahanzi.git
synced 2025-11-03 05:48:23 +08:00
Clean up intersection implementation and handle divide-by-0
This commit is contained in:
@ -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]];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user