mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-16 03:34:42 +02:00
add seed param
This commit is contained in:
@@ -25,6 +25,8 @@ new:
|
|||||||
|
|
||||||
- m_replace?
|
- m_replace?
|
||||||
|
|
||||||
|
- lsystem2, lsystem3, add seed param
|
||||||
|
|
||||||
deprecated:
|
deprecated:
|
||||||
rails2sections: use m_transpose
|
rails2sections: use m_transpose
|
||||||
has
|
has
|
||||||
|
@@ -3,7 +3,7 @@ use <../turtle2d.scad>;
|
|||||||
|
|
||||||
function _lsystem2_join(str_lt) = _join(str_lt);
|
function _lsystem2_join(str_lt) = _join(str_lt);
|
||||||
|
|
||||||
function _lsystem2_derive(axiom, rules, n, rule_prs) = _derive(axiom, rules, n, rule_prs);
|
function _lsystem2_derive(axiom, rules, n, rule_prs, seed) = _derive(axiom, rules, n, rule_prs, seed);
|
||||||
|
|
||||||
function _next_stack(t, code, stack) =
|
function _next_stack(t, code, stack) =
|
||||||
code == "[" ? [t, each stack] :
|
code == "[" ? [t, each stack] :
|
||||||
|
@@ -3,7 +3,7 @@ use <../turtle3d.scad>;
|
|||||||
|
|
||||||
function _lsystem3_join(str_lt) = _join(str_lt);
|
function _lsystem3_join(str_lt) = _join(str_lt);
|
||||||
|
|
||||||
function _lsystem3_derive(axiom, rules, n, rule_prs) = _derive(axiom, rules, n, rule_prs);
|
function _lsystem3_derive(axiom, rules, n, rule_prs, seed) = _derive(axiom, rules, n, rule_prs, seed);
|
||||||
|
|
||||||
function _next_stack(t, code, stack) =
|
function _next_stack(t, code, stack) =
|
||||||
code == "[" ? [t, each stack] :
|
code == "[" ? [t, each stack] :
|
||||||
|
@@ -8,16 +8,16 @@ function _join(str_lt) =
|
|||||||
let(leng = len(str_lt))
|
let(leng = len(str_lt))
|
||||||
[for(i = 0, s = str_lt[0]; i < leng; i = i + 1, s = str(s, str_lt[i])) s][leng - 1];
|
[for(i = 0, s = str_lt[0]; i < leng; i = i + 1, s = str(s, str_lt[i])) s][leng - 1];
|
||||||
|
|
||||||
function c_or_v(c, v, rules, rules_pr, leng, i = 0) =
|
function c_or_v(c, v, rules, rules_pr, leng, seed, i = 0) =
|
||||||
i == leng ? c :
|
i == leng ? c :
|
||||||
let(idx = search([v[i]], rules, num_returns_per_match=0, index_col_num = 1)[0][0])
|
let(idx = search([v[i]], rules, num_returns_per_match=0, index_col_num = 1)[0][0])
|
||||||
rand(0, 1) <= rules_pr[idx] ? v[i] : c_or_v(c, v, rules, rules_pr, leng, i + 1);
|
rand(0, 1, seed + i) <= rules_pr[idx] ? v[i] : c_or_v(c, v, rules, rules_pr, leng, seed, i + 1);
|
||||||
|
|
||||||
function _derive1_p(base, rules, rules_pr) =
|
function _derive1_p(base, rules, rules_pr, seed) =
|
||||||
_join([
|
_join([
|
||||||
for(c = base)
|
for(c = base)
|
||||||
let(v = [for(r = rules) if(r[0] == c) r[1]])
|
let(v = [for(r = rules) if(r[0] == c) r[1]])
|
||||||
v == [] ? c : c_or_v(c, v, rules, rules_pr, len(v))
|
v == [] ? c : c_or_v(c, v, rules, rules_pr, len(v), seed)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function _derive1(base, rules) = _join([
|
function _derive1(base, rules) = _join([
|
||||||
@@ -26,9 +26,10 @@ function _derive1(base, rules) = _join([
|
|||||||
is_undef(v) ? c : v
|
is_undef(v) ? c : v
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function _derive(base, rules, n, rule_prs) =
|
function _derive(base, rules, n, rule_prs, seed) =
|
||||||
let(
|
let(
|
||||||
derive = is_undef(rule_prs) ? function(base) _derive1(base, rules) : function(base) _derive1_p(base, rules, rule_prs),
|
sd = is_undef(seed) ? rand(0, 1, seed) * 1000 : seed,
|
||||||
|
derive = is_undef(rule_prs) ? function(base) _derive1(base, rules) : function(base) _derive1_p(base, rules, rule_prs, sd),
|
||||||
bs = [
|
bs = [
|
||||||
for(i = 0, b = derive(base); i < n; i = i + 1, b = i != n ? derive(b) : undef)
|
for(i = 0, b = derive(base); i < n; i = i + 1, b = i != n ? derive(b) : undef)
|
||||||
b
|
b
|
||||||
|
@@ -11,9 +11,9 @@
|
|||||||
use <_impl/_lsystem2_impl.scad>;
|
use <_impl/_lsystem2_impl.scad>;
|
||||||
use <turtle2d.scad>;
|
use <turtle2d.scad>;
|
||||||
|
|
||||||
function lsystem2(axiom, rules, n, angle, leng = 1, heading = 0, start = [0, 0], forward_chars = "F", rule_prs) =
|
function lsystem2(axiom, rules, n, angle, leng = 1, heading = 0, start = [0, 0], forward_chars = "F", rule_prs, seed) =
|
||||||
let(
|
let(
|
||||||
derived = _lsystem2_derive(axiom, rules, n, rule_prs),
|
derived = _lsystem2_derive(axiom, rules, n, rule_prs, seed),
|
||||||
codes = forward_chars == "F" ? derived : _lsystem2_join([
|
codes = forward_chars == "F" ? derived : _lsystem2_join([
|
||||||
for(c = derived)
|
for(c = derived)
|
||||||
let(idx = search(c, forward_chars))
|
let(idx = search(c, forward_chars))
|
||||||
|
@@ -11,9 +11,9 @@
|
|||||||
use <_impl/_lsystem3_impl.scad>;
|
use <_impl/_lsystem3_impl.scad>;
|
||||||
use <turtle3d.scad>;
|
use <turtle3d.scad>;
|
||||||
|
|
||||||
function lsystem3(axiom, rules, n, angle, leng = 1, heading = 0, start = [0, 0, 0], forward_chars = "F", rule_prs) =
|
function lsystem3(axiom, rules, n, angle, leng = 1, heading = 0, start = [0, 0, 0], forward_chars = "F", rule_prs, seed) =
|
||||||
let(
|
let(
|
||||||
derived = _lsystem3_derive(axiom, rules, n, rule_prs),
|
derived = _lsystem3_derive(axiom, rules, n, rule_prs, seed),
|
||||||
codes = forward_chars == "F" ? derived : _lsystem3_join([
|
codes = forward_chars == "F" ? derived : _lsystem3_join([
|
||||||
for(c = derived)
|
for(c = derived)
|
||||||
let(idx = search(c, forward_chars))
|
let(idx = search(c, forward_chars))
|
||||||
|
Reference in New Issue
Block a user