1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-13 18:24:28 +02:00

support 3D line

This commit is contained in:
Justin Lin
2022-05-28 11:40:29 +08:00
parent 238c2ede27
commit 27701333c7
2 changed files with 10 additions and 7 deletions

View File

@@ -3,17 +3,19 @@ use <../../util/sum.scad>;
ZERO_VT = [0, 0]; ZERO_VT = [0, 0];
ZERO_VTS = [undef, undef, [0, 0], [0, 0, 0]];
function limit(vt, magnitude) = function limit(vt, magnitude) =
let(m = norm(vt)) let(m = norm(vt))
m > magnitude ? vt / m * magnitude : 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 // node
function node(position, option) = [ function node(position, option) = [
position, // position position, // position
rands(0, 1, 2), // velocity rands(0, 1, len(position)), // velocity
option // option option // option
]; ];
function position_of(node) = node[0]; function position_of(node) = node[0];
@@ -36,7 +38,7 @@ function seperationFrom(node, other) =
v = position_of(node) - position_of(other), v = position_of(node) - position_of(other),
dist = norm(v) 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) = function applyForceTo(node, seperation, cohesion) =
let( let(
@@ -88,6 +90,7 @@ function updateAllSeperation(allSeperation, allSeperationFrom_i_1) =
]; ];
function differentiate(nodes, leng) = function differentiate(nodes, leng) =
let(ZERO_VT = ZERO_VTS[len(position_of(nodes[0]))])
[ [
for(i = 0, for(i = 0,
j = 1, j = 1,

View File

@@ -1,9 +1,9 @@
use <_impl/_differential_line_growth.scad>; use <_impl/_differential_line_growth.scad>;
function differential_line_growth(init_shape, option, times) = function differential_line_growth(points, option, times) =
let( let(
init_nodes = [ init_nodes = [
for(p = init_shape) for(p = points)
node(p, option) node(p, option)
], ],
nodes_lt = [ nodes_lt = [