diff --git a/src/bezier_curve.scad b/src/bezier_curve.scad index 0e2057d1..20374e72 100644 --- a/src/bezier_curve.scad +++ b/src/bezier_curve.scad @@ -12,8 +12,18 @@ * **/ -function _combi(n, k) = - k == 0 ? 1 : (_combi(n, k - 1) * (n - k + 1) / k); +function _combi(n, k) = + let( + bi_coef = [ + [1], // n = 0: for padding + [1,1], // n = 1: for Linear curves, how about drawing a line directly? + [1,2,1], // n = 2: for Quadratic curves + [1,3,3,1] // n = 3: for Cubic Bézier curves + ] + ) + n < len(bi_coef) ? bi_coef[n][k] : ( + k == 0 ? 1 : (_combi(n, k - 1) * (n - k + 1) / k) + ); function bezier_curve_coordinate(t, pn, n, i = 0) = i == n + 1 ? 0 :