From 7dbfbc37411ccb694742b29d5be847af5d2f5339 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Wed, 29 May 2019 09:08:34 +0800 Subject: [PATCH] add epsilon --- src/__private__/__in_line.scad | 4 ++-- src/in_line.scad | 2 +- src/in_shape.scad | 11 +++++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/__private__/__in_line.scad b/src/__private__/__in_line.scad index 04d9bb03..8493bfcc 100644 --- a/src/__private__/__in_line.scad +++ b/src/__private__/__in_line.scad @@ -1,6 +1,6 @@ -function __in_line(line_pts, pt) = +function __in_line(line_pts, pt, epsilon = 0.0001) = let( v1 = line_pts[0] - pt, v2 = line_pts[1] - pt ) - (cross(v1, v2) == 0) && ((v1 * v2) <= 0); \ No newline at end of file + (abs(cross(v1, v2)) < epsilon) && ((v1 * v2) <= epsilon); \ No newline at end of file diff --git a/src/in_line.scad b/src/in_line.scad index 20c3e8e9..9c80ab66 100644 --- a/src/in_line.scad +++ b/src/in_line.scad @@ -1,3 +1,3 @@ include <__private__/__in_line.scad>; -function in_line(line_pts, pt) = __in_line(line_pts, pt); \ No newline at end of file +function in_line(line_pts, pt, epsilon = 0.0001) = __in_line(line_pts, pt, epsilon); \ No newline at end of file diff --git a/src/in_shape.scad b/src/in_shape.scad index d64ee18c..acce8385 100644 --- a/src/in_shape.scad +++ b/src/in_shape.scad @@ -12,14 +12,13 @@ function _in_shape_in_line_equation(edge, pt) = ) (pt[1] == a * pt[0] + b); -function _in_shape_in_any_edges_sub(edges, leng, pt, i) = +function _in_shape_in_any_edges_sub(edges, leng, pt, i, epsilon) = leng == i ? false : ( - __in_line(edges[i], pt) ? true : _in_shape_in_any_edges_sub(edges, leng, pt, i + 1) + __in_line(edges[i], pt, epsilon) ? true : _in_shape_in_any_edges_sub(edges, leng, pt, i + 1, epsilon) ); -function _in_shape_in_any_edges(edges, pt) = _in_shape_in_any_edges_sub(edges, len(edges), pt, 0); +function _in_shape_in_any_edges(edges, pt, epsilon) = _in_shape_in_any_edges_sub(edges, len(edges), pt, 0, epsilon); - function _in_shape_interpolate_x(y, p1, p2) = p1[1] == p2[1] ? p1[0] : ( p1[0] + (p2[0] - p1[0]) * (y - p1[1]) / (p2[1] - p1[1]) @@ -37,10 +36,10 @@ function _in_shape_sub(shapt_pts, leng, pt, cond, i, j) = _in_shape_sub(shapt_pts, leng, pt, cond, j, j + 1) ); -function in_shape(shapt_pts, pt, include_edge = false) = +function in_shape(shapt_pts, pt, include_edge = false, epsilon = 0.0001) = let( leng = len(shapt_pts), edges = __edges_from(points) ) - _in_shape_in_any_edges(edges, pt) ? include_edge : + _in_shape_in_any_edges(edges, pt, epsilon) ? include_edge : _in_shape_sub(shapt_pts, leng, pt, false, leng - 1, 0); \ No newline at end of file