1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-07 07:16:36 +02:00

add pnoise2

This commit is contained in:
Justin Lin
2020-03-06 14:51:37 +08:00
parent 83bd7aa9d2
commit 5794e1678b
2 changed files with 42 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
use <experimental/_impl/_pnoise_comm.scad>;
function _pnoise2_grad2(hashvalue, x, y) =
let(case = hashvalue % 8)
case == 0 ? y :
case == 1 ? x + y :
case == 2 ? x:
case == 3 ? x - y:
case == 4 ? -y:
case == 5 ? -x - y:
case == 6 ? -x : -x + y;
function _pnoise2(x, y, seed) =
let(
xi = floor(x),
yi = floor(y),
xf = x - xi,
yf = y - yi,
u = _pnoise_fade(xf),
v = _pnoise_fade(yf),
aa = _pnoise_lookup_poise_table(_pnoise_lookup_poise_table(seed + xi) + yi),
ba = _pnoise_lookup_poise_table(_pnoise_lookup_poise_table(seed + xi + 1) + yi),
ab = _pnoise_lookup_poise_table(_pnoise_lookup_poise_table(seed + xi) + yi + 1),
bb = _pnoise_lookup_poise_table(_pnoise_lookup_poise_table(seed + xi + 1) + yi + 1),
y1 = _pnoise_lerp(
_pnoise2_grad2(aa, xf, yf),
_pnoise2_grad2(ba, xf - 1, yf),
u
),
y2 = _pnoise_lerp(
_pnoise2_grad2(ab, xf, yf - 1),
_pnoise2_grad2(bb, xf - 1, yf - 1),
u
)
)
_pnoise_lerp(y1, y2, v);

View File

@@ -0,0 +1,6 @@
use <util/rand.scad>;
use <experimental/_impl/_pnoise2_impl.scad>;
function pnoise2(points, seed) =
let(sd = is_undef(seed) ? floor(rand(0, 256)) : seed % 256)
[for(p = points) _pnoise2(p[0], p[1], sd)];