mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-06 23:06:43 +02:00
add pnoise2
This commit is contained in:
36
src/experimental/_impl/_pnoise2_impl.scad
Normal file
36
src/experimental/_impl/_pnoise2_impl.scad
Normal 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);
|
6
src/experimental/pnoise2.scad
Normal file
6
src/experimental/pnoise2.scad
Normal 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)];
|
Reference in New Issue
Block a user