module Numeric.Noise.OpenSimplex (
noise2,
noise2Base,
) where
import Data.Bool (bool)
import Numeric.Noise.Internal
import Numeric.Noise.Internal.Math
noise2 :: (RealFrac a) => Noise2 a
noise2 :: forall a. RealFrac a => Noise2 a
noise2 = (Seed -> a -> a -> a) -> Noise2' a a
forall p v. (Seed -> p -> p -> v) -> Noise2' p v
mkNoise2 Seed -> a -> a -> a
forall a. RealFrac a => Seed -> a -> a -> a
noise2Base
{-# INLINE noise2 #-}
noise2Base :: (RealFrac a) => Seed -> a -> a -> a
noise2Base :: forall a. RealFrac a => Seed -> a -> a -> a
noise2Base Seed
seed a
xo a
yo =
let !f2 :: a
f2 = a
0.5 a -> a -> a
forall a. Num a => a -> a -> a
* (a
forall a. Fractional a => a
sqrt3 a -> a -> a
forall a. Num a => a -> a -> a
- a
1)
!to :: a
to = (a
xo a -> a -> a
forall a. Num a => a -> a -> a
+ a
yo) a -> a -> a
forall a. Num a => a -> a -> a
* a
f2
!x :: a
x = a
xo a -> a -> a
forall a. Num a => a -> a -> a
+ a
to
!y :: a
y = a
yo a -> a -> a
forall a. Num a => a -> a -> a
+ a
to
!fx :: Hash
fx = a -> Hash
forall b. Integral b => a -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor a
x
!fy :: Hash
fy = a -> Hash
forall b. Integral b => a -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor a
y
!xi :: a
xi = a
x a -> a -> a
forall a. Num a => a -> a -> a
- Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
fx
!yi :: a
yi = a
y a -> a -> a
forall a. Num a => a -> a -> a
- Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
fy
!t :: a
t = (a
xi a -> a -> a
forall a. Num a => a -> a -> a
+ a
yi) a -> a -> a
forall a. Num a => a -> a -> a
* a
forall a. Fractional a => a
g2
!x0 :: a
x0 = a
xi a -> a -> a
forall a. Num a => a -> a -> a
- a
t
!y0 :: a
y0 = a
yi a -> a -> a
forall a. Num a => a -> a -> a
- a
t
!i :: Hash
i = Hash
fx Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
primeX
!j :: Hash
j = Hash
fy Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
primeY
!a :: a
a = a
0.5 a -> a -> a
forall a. Num a => a -> a -> a
- a
x0 a -> a -> a
forall a. Num a => a -> a -> a
* a
x0 a -> a -> a
forall a. Num a => a -> a -> a
- a
y0 a -> a -> a
forall a. Num a => a -> a -> a
* a
y0
n0 :: a
n0 = a -> Seed -> Hash -> Hash -> a -> a -> a
forall a. RealFrac a => a -> Seed -> Hash -> Hash -> a -> a -> a
attenuate a
a Seed
seed Hash
i Hash
j a
x0 a
y0
n1 :: a
n1 =
let cond :: Hash
cond = Hash -> Hash -> Bool -> Hash
forall a. a -> a -> Bool -> a
bool Hash
0 Hash
1 (a
y0 a -> a -> Bool
forall a. Ord a => a -> a -> Bool
> a
x0)
x1 :: a
x1 = (a
x0 a -> a -> a
forall a. Num a => a -> a -> a
+ a
forall a. Fractional a => a
g2 a -> a -> a
forall a. Num a => a -> a -> a
- a
1) a -> a -> a
forall a. Num a => a -> a -> a
+ Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
cond
y1 :: a
y1 = (a
y0 a -> a -> a
forall a. Num a => a -> a -> a
+ a
forall a. Fractional a => a
g2) a -> a -> a
forall a. Num a => a -> a -> a
- Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
cond
i1 :: Hash
i1 = Hash
i Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
+ (Hash
1 Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
- Hash
cond) Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
primeX
j1 :: Hash
j1 = Hash
j Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
+ Hash
cond Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
primeY
b :: a
b = a
0.5 a -> a -> a
forall a. Num a => a -> a -> a
- a
x1 a -> a -> a
forall a. Num a => a -> a -> a
* a
x1 a -> a -> a
forall a. Num a => a -> a -> a
- a
y1 a -> a -> a
forall a. Num a => a -> a -> a
* a
y1
in a -> Seed -> Hash -> Hash -> a -> a -> a
forall a. RealFrac a => a -> Seed -> Hash -> Hash -> a -> a -> a
attenuate a
b Seed
seed Hash
i1 Hash
j1 a
x1 a
y1
!n2 :: a
n2 =
let g2t :: a
g2t = a
1 a -> a -> a
forall a. Num a => a -> a -> a
- a
2 a -> a -> a
forall a. Num a => a -> a -> a
* a
forall a. Fractional a => a
g2
c :: a
c = a
2 a -> a -> a
forall a. Num a => a -> a -> a
* a
g2t a -> a -> a
forall a. Num a => a -> a -> a
* (a
1 a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
forall a. Fractional a => a
g2 a -> a -> a
forall a. Num a => a -> a -> a
- a
2) a -> a -> a
forall a. Num a => a -> a -> a
* a
t a -> a -> a
forall a. Num a => a -> a -> a
+ (-a
2 a -> a -> a
forall a. Num a => a -> a -> a
* a
g2t a -> a -> a
forall a. Num a => a -> a -> a
* a
g2t a -> a -> a
forall a. Num a => a -> a -> a
+ a
a)
x2 :: a
x2 = a
x0 a -> a -> a
forall a. Num a => a -> a -> a
+ (a
2 a -> a -> a
forall a. Num a => a -> a -> a
* a
forall a. Fractional a => a
g2 a -> a -> a
forall a. Num a => a -> a -> a
- a
1)
y2 :: a
y2 = a
y0 a -> a -> a
forall a. Num a => a -> a -> a
+ (a
2 a -> a -> a
forall a. Num a => a -> a -> a
* a
forall a. Fractional a => a
g2 a -> a -> a
forall a. Num a => a -> a -> a
- a
1)
in a -> Seed -> Hash -> Hash -> a -> a -> a
forall a. RealFrac a => a -> Seed -> Hash -> Hash -> a -> a -> a
attenuate a
c Seed
seed (Hash
i Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
+ Hash
primeX) (Hash
j Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
+ Hash
primeY) a
x2 a
y2
in a -> a
forall a. RealFrac a => a -> a
normalize (a -> a) -> a -> a
forall a b. (a -> b) -> a -> b
$ a
n0 a -> a -> a
forall a. Num a => a -> a -> a
+ a
n1 a -> a -> a
forall a. Num a => a -> a -> a
+ a
n2
{-# INLINE [2] noise2Base #-}
attenuate :: (RealFrac a) => a -> Seed -> Hash -> Hash -> a -> a -> a
attenuate :: forall a. RealFrac a => a -> Seed -> Hash -> Hash -> a -> a -> a
attenuate !a
vi Seed
seed Hash
i Hash
j a
x a
y =
let !v :: a
v = a -> a -> a
forall a. Ord a => a -> a -> a
max a
0 a
vi
in (a
v a -> a -> a
forall a. Num a => a -> a -> a
* a
v) a -> a -> a
forall a. Num a => a -> a -> a
* (a
v a -> a -> a
forall a. Num a => a -> a -> a
* a
v) a -> a -> a
forall a. Num a => a -> a -> a
* Seed -> Hash -> Hash -> a -> a -> a
forall a. RealFrac a => Seed -> Hash -> Hash -> a -> a -> a
gradCoord2 Seed
seed Hash
i Hash
j a
x a
y
{-# INLINE attenuate #-}
normalize :: (RealFrac a) => a -> a
normalize :: forall a. RealFrac a => a -> a
normalize = (a
99.83685446303647 a -> a -> a
forall a. Num a => a -> a -> a
*)
{-# INLINE normalize #-}