From 4e406b19cfdbe8f637aa684baab256df123e3372 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Wed, 4 May 2022 21:04:38 +0800 Subject: [PATCH] refactor --- src/_impl/_bezier_curve_impl.scad | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/_impl/_bezier_curve_impl.scad b/src/_impl/_bezier_curve_impl.scad index ff42b149..17e223c4 100644 --- a/src/_impl/_bezier_curve_impl.scad +++ b/src/_impl/_bezier_curve_impl.scad @@ -15,17 +15,20 @@ function _combi(n, k) = function bezier_curve_coordinate(t, pn, n, i) = let(one_t = 1 - t) sum([for(j = [0:n]) _combi(n, j) * pn[j][i] * one_t ^ (n - j) * t ^ j]); - -function _bezier_curve_point2(t, points) = - let(n = len(points) - 1) + +_bezier_curve_point2 = function(t, points, n) [for(i = [0, 1]) bezier_curve_coordinate(t, points, n, i)]; -function _bezier_curve_point3(t, points) = - let(n = len(points) - 1) +_bezier_curve_point3 = function(t, points, n) [for(i = [0:2]) bezier_curve_coordinate(t, points, n, i)]; function _bezier_curve_impl(t_step, points) = - let(t_end = ceil(1 / t_step)) - len(points[0]) == 3 ? - [each [for(t = 0; t < t_end; t = t + 1) _bezier_curve_point3(t * t_step, points)], _bezier_curve_point3(1, points)] : - [each [for(t = 0; t < t_end; t = t + 1) _bezier_curve_point2(t * t_step, points)], _bezier_curve_point2(1, points)]; + let( + t_end = ceil(1 / t_step), + n = len(points) - 1, + _bezier_curve = len(points[0]) == 3 ? _bezier_curve_point3 : _bezier_curve_point2 + ) + [ + each [for(t = 0; t < t_end; t = t + 1) _bezier_curve(t * t_step, points, n)], + _bezier_curve(1, points, n) + ];