From 06dec812c2b729f5b48c63d30562f855bde78cc0 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Wed, 15 Apr 2020 08:21:20 +0800 Subject: [PATCH] refactor --- src/experimental/_impl/_lsystem2_impl.scad | 34 +--------------------- src/experimental/_impl/_lsystem3_impl.scad | 34 +--------------------- src/experimental/_impl/_lsystem_comm.scad | 33 +++++++++++++++++++++ 3 files changed, 35 insertions(+), 66 deletions(-) create mode 100644 src/experimental/_impl/_lsystem_comm.scad diff --git a/src/experimental/_impl/_lsystem2_impl.scad b/src/experimental/_impl/_lsystem2_impl.scad index c1d4111a..1262029d 100644 --- a/src/experimental/_impl/_lsystem2_impl.scad +++ b/src/experimental/_impl/_lsystem2_impl.scad @@ -1,37 +1,5 @@ -use ; +use ; use ; -use ; - -// It doesn't use recursion to avoid recursion error. -function _join(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]; - -function c_or_v(c, v, rules, rules_pr, leng, i = 0) = - i == leng ? c : ( - 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) - ); - -function _derive1_p(base, rules, rules_pr) = - _join([ - for(c = base) - let(v = [for(r = rules) if(r[0] == c) r[1]]) - v == [] ? c : - c_or_v(c, v, rules, rules_pr, len(v)) - ]); - -function _derive_p(base, rules, rules_pr, n, i = 0) = - i == n ? base : _derive_p(_derive1_p(base, rules, rules_pr), rules, rules_pr, n, i + 1); - -function _derive1(base, rules) = _join([ - for(c = base) - let(v = assoc_lookup(rules, c)) - is_undef(v) ? c : v -]); - -function _derive(base, rules, n, i = 0) = - i == n ? base : _derive(_derive1(base, rules), rules, n, i + 1); function _lsystem2_derive(axiom, rules, n, rules_pr) = is_undef(rules_pr) ? _derive(axiom, rules, n) : diff --git a/src/experimental/_impl/_lsystem3_impl.scad b/src/experimental/_impl/_lsystem3_impl.scad index a7a29ccd..a0a2c03a 100644 --- a/src/experimental/_impl/_lsystem3_impl.scad +++ b/src/experimental/_impl/_lsystem3_impl.scad @@ -1,37 +1,5 @@ -use ; +use ; use ; -use ; - -// It doesn't use recursion to avoid recursion error. -function _join(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]; - -function c_or_v(c, v, rules, rules_pr, leng, i = 0) = - i == leng ? c : ( - 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) - ); - -function _derive1_p(base, rules, rules_pr) = - _join([ - for(c = base) - let(v = [for(r = rules) if(r[0] == c) r[1]]) - v == [] ? c : - c_or_v(c, v, rules, rules_pr, len(v)) - ]); - -function _derive_p(base, rules, rules_pr, n, i = 0) = - i == n ? base : _derive_p(_derive1_p(base, rules, rules_pr), rules, rules_pr, n, i + 1); - -function _derive1(base, rules) = _join([ - for(c = base) - let(v = assoc_lookup(rules, c)) - is_undef(v) ? c : v -]); - -function _derive(base, rules, n, i = 0) = - i == n ? base : _derive(_derive1(base, rules), rules, n, i + 1); function _lsystem3_derive(axiom, rules, n, rules_pr) = is_undef(rules_pr) ? _derive(axiom, rules, n) : diff --git a/src/experimental/_impl/_lsystem_comm.scad b/src/experimental/_impl/_lsystem_comm.scad new file mode 100644 index 00000000..abff1598 --- /dev/null +++ b/src/experimental/_impl/_lsystem_comm.scad @@ -0,0 +1,33 @@ +use ; +use ; + +// It doesn't use recursion to avoid recursion error. +function _join(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]; + +function c_or_v(c, v, rules, rules_pr, leng, i = 0) = + i == leng ? c : ( + 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) + ); + +function _derive1_p(base, rules, rules_pr) = + _join([ + for(c = base) + let(v = [for(r = rules) if(r[0] == c) r[1]]) + v == [] ? c : + c_or_v(c, v, rules, rules_pr, len(v)) + ]); + +function _derive_p(base, rules, rules_pr, n, i = 0) = + i == n ? base : _derive_p(_derive1_p(base, rules, rules_pr), rules, rules_pr, n, i + 1); + +function _derive1(base, rules) = _join([ + for(c = base) + let(v = assoc_lookup(rules, c)) + is_undef(v) ? c : v +]); + +function _derive(base, rules, n, i = 0) = + i == n ? base : _derive(_derive1(base, rules), rules, n, i + 1); \ No newline at end of file