1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-12 17:54:18 +02:00
This commit is contained in:
Justin Lin
2022-03-18 12:01:42 +08:00
parent 5c547351db
commit e9dd4418d1
5 changed files with 23 additions and 26 deletions

View File

@@ -4,5 +4,10 @@ function _str_hash(value) =
end = len(chars) - 1
)
end == 0 ? ord(chars[0]) :
let(cum_total = [for(i = 0, s = ord(chars[0]); i < end; i = i + 1, s = s + (ord(chars[i]) * 31 ^ i)) s])
let(
cum_total = [
for(i = 0, s = ord(chars[0]), is_continue = i < end;
is_continue;
i = i + 1, is_continue = i < end, s = is_continue ? s + (ord(chars[i]) * 31 ^ i) : undef) s]
)
cum_total[end - 1] + (ord(chars[end]) * 31 ^ end);

View File

@@ -1,22 +0,0 @@
use <ptf/ptf_rotate.scad>;
use <sweep.scad>;
module polar_zonohedra(n){
spiral = [
for(r=[0:n])
let(p = ptf_rotate([10, 0, PI * 10 * r / n], [0, 0, -360 * r / n]) - [10, 0, 0])
[p[0], p[1], p[2] * 1.75]
];
sections = [
for(i=[0:n])
[for(p = spiral) ptf_rotate(p, [0, 0, 360 * i / n])]
];
sweep(sections);
}
for(n = [4:8]) {
translate([50 * (n - 4), 0, 0])
polar_zonohedra(n);
}

View File

@@ -3,5 +3,10 @@ use <../swap.scad>;
function _shuffle(lt, indices, leng) =
let(end = len(lt) - 1)
end == 0 ? lt :
let(cum = [for(i = 0, s = swap(lt, i, indices[i]); i < end; i = i + 1, s = swap(s, i, indices[i])) s])
let(
cum = [
for(i = 0, s = swap(lt, 0, indices[0]), is_continue = i < end;
is_continue;
i = i + 1, is_continue = i < end, s = is_continue ? swap(s, i, indices[i]) : undef) s]
)
swap(cum[end - 1], end, indices[end]);

View File

@@ -11,6 +11,10 @@
function sub_str(t, begin, end) =
let(
ed = is_undef(end) ? len(t) : end,
cum = [for(i = begin, s = t[i]; i < ed; i = i + 1, s = str(s, t[i])) s]
cum = [
for(i = begin, s = t[i], is_continue = i < ed;
is_continue;
i = i + 1, is_continue = i < ed, s = is_continue ? str(s, t[i]) : undef) s
]
)
cum[len(cum) - 1];

View File

@@ -11,5 +11,10 @@
function sum(lt) =
let(end = len(lt) - 1)
end == 0 ? lt[0] :
let(cum_total = [for(i = 0, s = lt[0]; i < end; i = i + 1, s = s + lt[i]) s])
let(
cum_total = [
for(i = 0, s = lt[0], is_continue = i < end;
is_continue;
i = i + 1, is_continue = i < end, s = is_continue ? s + lt[i] : undef) s]
)
cum_total[end - 1] + lt[end];