From e0256a0925b9f14e74fe518ad40db280fc8a31ef Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Tue, 28 May 2019 14:28:53 +0800 Subject: [PATCH] refactor --- src/__private__/__line_intersection.scad | 12 ++++++++++++ src/bijection_offset.scad | 18 +++--------------- 2 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 src/__private__/__line_intersection.scad diff --git a/src/__private__/__line_intersection.scad b/src/__private__/__line_intersection.scad new file mode 100644 index 00000000..9d958107 --- /dev/null +++ b/src/__private__/__line_intersection.scad @@ -0,0 +1,12 @@ +function __line_intersection(line_pts1, line_pts2) = + let( + a1 = line_pts1[0], + a2 = line_pts1[1], + b1 = line_pts2[0], + b2 = line_pts2[1], + a = a2 - a1, + b = b2 - b1, + s = b1 - a1 + ) + cross(a, b) == 0 ? [] : // they are parallel or conincident edges + a1 + a * cross(s, b) / cross(a, b); \ No newline at end of file diff --git a/src/bijection_offset.scad b/src/bijection_offset.scad index 7a5b39f7..9f1be251 100644 --- a/src/bijection_offset.scad +++ b/src/bijection_offset.scad @@ -9,6 +9,7 @@ **/ include <__private__/__edges_from.scad>; +include <__private__/__line_intersection.scad>; function _bijection_inward_edge_normal(edge) = let( @@ -41,25 +42,12 @@ function _bijection__bijection_offset_edges(edges, d) = _bijection_offset_edge(edge, dx, dy) ]; -function _bijection__bijection__bijection_offset_edges_intersection(edge1, edge2) = - let( - a1 = edge1[0], - a2 = edge1[1], - b1 = edge2[0], - b2 = edge2[1], - a = a2 - a1, - b = b2 - b1, - s = b1 - a1 - ) - cross(a, b) == 0 ? [] : // they are parallel or conincident edges - a1 + a * cross(s, b) / cross(a, b); - function bijection_offset(pts, d) = let( es = __edges_from(pts), offset_es = _bijection__bijection_offset_edges(es, d), leng = len(offset_es), - last_p = _bijection__bijection__bijection_offset_edges_intersection(offset_es[leng - 1], offset_es[0]) + last_p = __line_intersection(offset_es[leng - 1], offset_es[0]) ) concat( [ @@ -67,7 +55,7 @@ function bijection_offset(pts, d) = let( this_edge = offset_es[i], next_edge = offset_es[i + 1], - p = _bijection__bijection__bijection_offset_edges_intersection(this_edge, next_edge) + p = __line_intersection(this_edge, next_edge) ) // p == p to avoid [nan, nan], because [nan, nan] != [nan, nan] if(p != [] && p == p) p