__line_intersection.scad
1 function __line_intersection2(line_pts1, line_pts2, ext, epsilon = 0.0001) = 2 let( 3 a1 = line_pts1[0], 4 a2 = line_pts1[1], 5 b1 = line_pts2[0], 6 b2 = line_pts2[1], 7 a = a2 - a1, 8 b = b2 - b1, 9 c = cross(a, b) 10 ) 11 abs(c) < epsilon ? [] : // they are parallel or conincident edges 12 let( 13 t = cross(b1 - a1, b) / c, 14 p = a1 + a * t 15 ) 16 ext ? p : 17 let(u = -cross(a1 - b1, a) / c) 18 t >= 0 && t <= 1 && u >= 0 && u <= 1 ? p : []; 19 20 function v_scalar(v1, v2) = 21 let(s = norm(v1) / norm(v2)) 22 s * v2 == v1 ? s : -s; 23 24 function __line_intersection3(line_pts1, line_pts2, ext, epsilon = 0.0001) = 25 let( 26 a1 = line_pts1[0], 27 a2 = line_pts1[1], 28 b1 = line_pts2[0], 29 b2 = line_pts2[1], 30 a = a2 - a1, 31 b = b2 - b1, 32 c = cross(a, b) 33 ) 34 cross(a, b1 - a1) * (b2 - a1) != 0 || // they aren't coplanar 35 norm(c) < epsilon ? [] : // they are parallel or conincident edges 36 let( 37 t = v_scalar(cross(b1 - a1, b), c), 38 p = a1 + a * t 39 ) 40 ext ? p : 41 let(u = v_scalar(cross(a1 - b1, a), -c)) 42 t >= 0 && t <= 1 && u >= 0 && u <= 1 ? p : [];