1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-01-17 06:08:31 +01:00
dotSCAD/examples/worley_noise_ball.scad
2022-06-06 13:11:46 +08:00

58 lines
1.4 KiB
OpenSCAD

use <noise/nz_worley3s.scad>
use <sweep.scad>
radius = 25;
a_step = 5;
tile_w = 10;
dist = "euclidean"; // [euclidean, manhattan, chebyshev, "border"]
noise_style = "CELL_R"; // [CELL_R, NOISE]
noise_factor = 1;
seed = rands(0, 255, 1)[0];
module worley_noise_ball() {
theta_tau_lt = [
for(tau = [-90:a_step:90])
[for(theta = 360; theta >= 0; theta = theta - a_step)
[theta, tau]]
];
function to_xyz(polar) =
let(
r = polar[0],
theta = polar[1],
tau = polar[2],
z = r * sin(tau),
r2 = r * cos(tau),
x = r2 * cos(theta),
y = r2 * sin(theta)
)
[x, y, z];
cells = [
for(row = theta_tau_lt)
nz_worley3s(
[for(theta_tau = row) to_xyz([radius, theta_tau[0], theta_tau[1]])],
seed,
tile_w,
dist
)
];
sections = [
for(ri = [0:len(theta_tau_lt) - 1])
[
for(ci = [0:len(theta_tau_lt[0]) - 1])
let(
theta_tau = theta_tau_lt[ri][ci],
off_r = noise_style == "CELL_R" ? norm([cells[ri][ci][0], cells[ri][ci][1], cells[ri][ci][2]]) : cells[ri][ci][3],
nr = radius + off_r * noise_factor
)
to_xyz([nr, theta_tau[0], theta_tau[1]])
]
];
sweep(sections);
}
worley_noise_ball();