mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-12 17:54:18 +02:00
refactor
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
use <../util/sum.scad>;
|
||||||
|
|
||||||
function _combi(n, k) =
|
function _combi(n, k) =
|
||||||
let(
|
let(
|
||||||
bi_coef = [
|
bi_coef = [
|
||||||
@@ -10,45 +12,17 @@ function _combi(n, k) =
|
|||||||
n < 4 ? bi_coef[n][k] :
|
n < 4 ? bi_coef[n][k] :
|
||||||
k == 0 ? 1 : (_combi(n, k - 1) * (n - k + 1) / k);
|
k == 0 ? 1 : (_combi(n, k - 1) * (n - k + 1) / k);
|
||||||
|
|
||||||
function bezier_curve_coordinate(t, pn, n, i = 0) =
|
function bezier_curve_coordinate(t, pn, n, i) =
|
||||||
i == n + 1 ? 0 :
|
let(one_t = 1 - t)
|
||||||
(_combi(n, i) * pn[i] * pow(1 - t, n - i) * pow(t, i) +
|
sum([for(j = [0:n]) _combi(n, j) * pn[j][i] * one_t ^ (n - j) * t ^ j]);
|
||||||
bezier_curve_coordinate(t, pn, n, i + 1));
|
|
||||||
|
|
||||||
function _bezier_curve_point2(t, points) =
|
function _bezier_curve_point2(t, points) =
|
||||||
let(n = len(points) - 1)
|
let(n = len(points) - 1)
|
||||||
[
|
[for(i = [0, 1]) bezier_curve_coordinate(t, points, n, i)];
|
||||||
bezier_curve_coordinate(
|
|
||||||
t,
|
|
||||||
[for(p = points) p.x],
|
|
||||||
n
|
|
||||||
),
|
|
||||||
bezier_curve_coordinate(
|
|
||||||
t,
|
|
||||||
[for(p = points) p.y],
|
|
||||||
n
|
|
||||||
)
|
|
||||||
];
|
|
||||||
|
|
||||||
function _bezier_curve_point3(t, points) =
|
function _bezier_curve_point3(t, points) =
|
||||||
let(n = len(points) - 1)
|
let(n = len(points) - 1)
|
||||||
[
|
[for(i = [0:2]) bezier_curve_coordinate(t, points, n, i)];
|
||||||
bezier_curve_coordinate(
|
|
||||||
t,
|
|
||||||
[for(p = points) p.x],
|
|
||||||
n
|
|
||||||
),
|
|
||||||
bezier_curve_coordinate(
|
|
||||||
t,
|
|
||||||
[for(p = points) p.y],
|
|
||||||
n
|
|
||||||
),
|
|
||||||
bezier_curve_coordinate(
|
|
||||||
t,
|
|
||||||
[for(p = points) p.z],
|
|
||||||
n
|
|
||||||
)
|
|
||||||
];
|
|
||||||
|
|
||||||
function _bezier_curve_impl(t_step, points) =
|
function _bezier_curve_impl(t_step, points) =
|
||||||
let(t_end = ceil(1 / t_step))
|
let(t_end = ceil(1 / t_step))
|
||||||
|
Reference in New Issue
Block a user