From 4f43260f449721fde9af8aef0fdf96de71f658b7 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sun, 24 Apr 2022 17:10:37 +0800 Subject: [PATCH] refactor --- src/_impl/_bijection_offset_impl.scad | 29 ++++++++------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/src/_impl/_bijection_offset_impl.scad b/src/_impl/_bijection_offset_impl.scad index 78112f66..816347d6 100644 --- a/src/_impl/_bijection_offset_impl.scad +++ b/src/_impl/_bijection_offset_impl.scad @@ -1,42 +1,30 @@ use <../__comm__/__lines_from.scad>; use <../__comm__/__line_intersection.scad>; -function _bijection_inward_edge_normal(edge) = +function _bijection_outward_edge_normal(edge) = let( - pt1 = edge[0], - pt2 = edge[1], - dx = pt2.x - pt1.x, - dy = pt2.y - pt1.y, - edge_leng = norm([dx, dy]) + v = edge[1] - edge[0], + nv = v / norm(v) ) - [-dy / edge_leng, dx / edge_leng]; + [nv.y, -nv.x]; -function _bijection_outward_edge_normal(edge) = -1 * _bijection_inward_edge_normal(edge); - -function _bijection_offset_edge(edge, dx, dy) = - let( - pt1 = edge[0], - pt2 = edge[1], - dxy = [dx, dy] - ) - [pt1 + dxy, pt2 + dxy]; +function _bijection_offset_edge(edge, dxy) = edge + [dxy, dxy]; function _bijection__bijection_offset_edges(edges, d) = [ for(edge = edges) - let(ow_normal_d = _bijection_outward_edge_normal(edge) * d) - _bijection_offset_edge(edge, ow_normal_d.x, ow_normal_d.y) + _bijection_offset_edge(edge, _bijection_outward_edge_normal(edge) * d) ]; function _bijection_offset_impl(pts, d, epsilon) = let( es = __lines_from(pts, true), offset_es = _bijection__bijection_offset_edges(es, d), - leng = len(offset_es), - leng_minus_one = leng - 1, + leng_minus_one = len(offset_es) - 1, last_p = __line_intersection2(offset_es[leng_minus_one], offset_es[0], epsilon) ) [ + // p == p to avoid [nan, nan], because [nan, nan] != [nan, nan] if(last_p != [] && last_p == last_p) last_p, each [ for(i = 0; i < leng_minus_one; i = i + 1) @@ -45,7 +33,6 @@ function _bijection_offset_impl(pts, d, epsilon) = next_edge = offset_es[i + 1], p = __line_intersection2(this_edge, next_edge, epsilon) ) - // p == p to avoid [nan, nan], because [nan, nan] != [nan, nan] assert(p != [] && p == p, "bijection_offset failed. Parallel or conincident edges found") p ]