From 27701333c7f1ac0f0ea696c6cacd08f6323b18e7 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sat, 28 May 2022 11:40:29 +0800 Subject: [PATCH] support 3D line --- .../_impl/_differential_line_growth.scad | 13 ++++++++----- src/experimental/differential_line_growth.scad | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/experimental/_impl/_differential_line_growth.scad b/src/experimental/_impl/_differential_line_growth.scad index 9ae6ee2b..7bcc7020 100644 --- a/src/experimental/_impl/_differential_line_growth.scad +++ b/src/experimental/_impl/_differential_line_growth.scad @@ -3,17 +3,19 @@ use <../../util/sum.scad>; ZERO_VT = [0, 0]; +ZERO_VTS = [undef, undef, [0, 0], [0, 0, 0]]; + function limit(vt, magnitude) = let(m = norm(vt)) m > magnitude ? vt / m * magnitude : vt; -function setMagnitude(vt, magnitude) = vt == ZERO_VT ? vt : unit_vector(vt) * magnitude; +function setMagnitude(vt, magnitude) = vt == ZERO_VTS[len(vt)] ? vt : unit_vector(vt) * magnitude; // node function node(position, option) = [ - position, // position - rands(0, 1, 2), // velocity - option // option + position, // position + rands(0, 1, len(position)), // velocity + option // option ]; function position_of(node) = node[0]; @@ -36,7 +38,7 @@ function seperationFrom(node, other) = v = position_of(node) - position_of(other), dist = norm(v) ) - dist < separationDistance_of(node) ? v / dist : ZERO_VT; + dist < separationDistance_of(node) ? v / dist : ZERO_VTS[len(v)]; function applyForceTo(node, seperation, cohesion) = let( @@ -88,6 +90,7 @@ function updateAllSeperation(allSeperation, allSeperationFrom_i_1) = ]; function differentiate(nodes, leng) = + let(ZERO_VT = ZERO_VTS[len(position_of(nodes[0]))]) [ for(i = 0, j = 1, diff --git a/src/experimental/differential_line_growth.scad b/src/experimental/differential_line_growth.scad index 271a2904..3b226b35 100644 --- a/src/experimental/differential_line_growth.scad +++ b/src/experimental/differential_line_growth.scad @@ -1,9 +1,9 @@ use <_impl/_differential_line_growth.scad>; -function differential_line_growth(init_shape, option, times) = +function differential_line_growth(points, option, times) = let( init_nodes = [ - for(p = init_shape) + for(p = points) node(p, option) ], nodes_lt = [