diff --git a/src/experimental/_impl/_nz_worley2_impl.scad b/src/experimental/_impl/_nz_worley2_impl.scad new file mode 100644 index 00000000..839d72c1 --- /dev/null +++ b/src/experimental/_impl/_nz_worley2_impl.scad @@ -0,0 +1,27 @@ +use ; + +function _neighbors(fcord, seed, dim, m, n) = [ + for(y = [-1:1]) + for(x = [-1:1]) + let( + nx = fcord[0] + x, + ny = fcord[1] + y, + sd_base = nx + ny * dim, + sd1 = _lookup_noise_table(seed + sd_base), + sd2 = _lookup_noise_table(sd1 * 255 + sd_base), + nbr = [(nx + sd1) * m, (ny + sd2) * n] + ) + nbr +]; + +function _nz_worley2(p, seed, dim, m, n, dist) = + let( + fcord = [floor(p[0] / m), floor(p[1] / n)], + nbrs = _neighbors(fcord, seed, dim, m, n), + dists = [ + for(nbr = nbrs) + if(!is_undef(nbr[1])) // Here's a workaround for a weired undef problem. bug of 2019.05? + _distance(nbr, p, dist) + ] + ) + min(dists); \ No newline at end of file diff --git a/src/experimental/_impl/_nz_worley2_comm.scad b/src/experimental/_impl/_nz_worley_comm.scad similarity index 77% rename from src/experimental/_impl/_nz_worley2_comm.scad rename to src/experimental/_impl/_nz_worley_comm.scad index 8bd8f390..7229a9c7 100644 --- a/src/experimental/_impl/_nz_worley2_comm.scad +++ b/src/experimental/_impl/_nz_worley_comm.scad @@ -4,20 +4,6 @@ _noise_table = [0.592157, 0.627451, 0.537255, 0.356863, 0.352941, 0.0588235, 0.5 function _lookup_noise_table(i) = _noise_table[i % 256]; -function _neighbors(fcord, seed, dim, m, n) = [ - for(y = [-1:1]) - for(x = [-1:1]) - let( - nx = fcord[0] + x, - ny = fcord[1] + y, - sd_base = nx + ny * dim, - sd1 = _lookup_noise_table(seed + sd_base), - sd2 = _lookup_noise_table(sd1 * 255 + sd_base), - nbr = [(nx + sd1) * m, (ny + sd2) * n] - ) - nbr -]; - function _manhattan(v) = sum([for(d = v) abs(d)]); function _chebyshev(p1, p2) = @@ -27,16 +13,4 @@ function _distance(nbr, p, dist) = dist == "euclidean" ? norm(nbr - p) : dist == "manhattan" ? _manhattan(nbr - p) : dist == "chebyshev" ? _chebyshev(nbr, p) : - assert("Unknown distance option"); - -function _nz_worley2(p, seed, dim, m, n, dist) = - let( - fcord = [floor(p[0] / m), floor(p[1] / n)], - nbrs = _neighbors(fcord, seed, dim, m, n), - dists = [ - for(nbr = nbrs) - if(!is_undef(nbr[1])) // Here's a workaround for a weired undef problem. bug of 2019.05? - _distance(nbr, p, dist) - ] - ) - min(dists); + assert("Unknown distance option"); \ No newline at end of file diff --git a/src/experimental/nz_worley2.scad b/src/experimental/nz_worley2.scad index 19555705..5eff240e 100644 --- a/src/experimental/nz_worley2.scad +++ b/src/experimental/nz_worley2.scad @@ -1,5 +1,5 @@ use ; -use ; +use ; function nz_worley2(size, x, y, seed, dim = 3, dist = "euclidean") = let(