{-# LANGUAGE OverloadedLists #-}
module Numeric.Noise.Internal.Math (
Seed,
Hash,
lerp,
cubicInterp,
hermiteInterp,
quinticInterp,
clamp,
primeX,
primeY,
primeZ,
hash2,
hash3,
infinity,
g2,
sqrt3,
valCoord2,
valCoord3,
gradCoord2,
gradCoord3,
maxHash,
) where
import Data.Bits
import Data.Int
import Data.Primitive.PrimArray
import Data.Word
type Seed = Word64
type Hash = Int32
lerp
:: (Num a)
=> a
-> a
-> a
-> a
lerp :: forall a. Num a => a -> a -> a -> a
lerp a
v0 a
v1 a
t = a
v0 a -> a -> a
forall a. Num a => a -> a -> a
+ a
t a -> a -> a
forall a. Num a => a -> a -> a
* (a
v1 a -> a -> a
forall a. Num a => a -> a -> a
- a
v0)
{-# INLINE [1] lerp #-}
{-# RULES
"lerp/Float/0" forall (a :: Float) b.
lerp a b 0 =
a
"lerp/Double/0" forall (a :: Double) b.
lerp a b 0 =
a
"lerp/Float/1" forall (a :: Float) b.
lerp a b 1 =
b
"lerp/Double/1" forall (a :: Double) b.
lerp a b 1 =
b
"lerp/id" forall a t. lerp a a t = a
"lerp/compose/start" forall a b t u.
lerp (lerp a b u) b t =
lerp a b (u + t - t * u)
"lerp/compose/end" forall a b t u.
lerp a (lerp a b u) t =
lerp a b (t * u)
#-}
cubicInterp :: (Num a) => a -> a -> a -> a -> a -> a
cubicInterp :: forall a. Num a => a -> a -> a -> a -> a -> a
cubicInterp a
a !a
b a
c a
d !a
t =
let !c' :: a
c' = a
c a -> a -> a
forall a. Num a => a -> a -> a
- a
a
!a' :: a
a' = a
a a -> a -> a
forall a. Num a => a -> a -> a
- a
b
!p :: a
p = (a
d a -> a -> a
forall a. Num a => a -> a -> a
- a
c) a -> a -> a
forall a. Num a => a -> a -> a
- a
a'
!b' :: a
b' = a
a' a -> a -> a
forall a. Num a => a -> a -> a
- a
p
in a
b a -> a -> a
forall a. Num a => a -> a -> a
+ a
t a -> a -> a
forall a. Num a => a -> a -> a
* (a
c' a -> a -> a
forall a. Num a => a -> a -> a
+ a
t a -> a -> a
forall a. Num a => a -> a -> a
* (a
b' a -> a -> a
forall a. Num a => a -> a -> a
+ a
t a -> a -> a
forall a. Num a => a -> a -> a
* a
p))
{-# INLINE [1] cubicInterp #-}
{-# RULES
"cubicInterp/Float/0" forall (a :: Float) b c d.
cubicInterp a b c d 0 =
b
"cubicInterp/Double/0" forall (a :: Double) b c d.
cubicInterp a b c d 0 =
b
"cubicInterp/Float/1" forall (a :: Float) b c d.
cubicInterp a b c d 1 =
c
"cubicInterp/Double/1" forall (a :: Double) b c d.
cubicInterp a b c d 1 =
c
"cubicInterp/Float/0.5" forall (a :: Float) b c d.
cubicInterp a b c d (0.5 :: Float) =
0.125 * (-a + 5 * b + 5 * c - d)
"cubicInterp/Double/0.5" forall (a :: Double) b c d.
cubicInterp a b c d (0.5 :: Double) =
0.125 * (-a + 5 * b + 5 * c - d)
#-}
hermiteInterp :: (Num a) => a -> a
hermiteInterp :: forall a. Num a => a -> a
hermiteInterp a
t = a
t a -> a -> a
forall a. Num a => a -> a -> a
* a
t a -> a -> a
forall a. Num a => a -> a -> a
* (a
3 a -> a -> a
forall a. Num a => a -> a -> a
- a
2 a -> a -> a
forall a. Num a => a -> a -> a
* a
t)
{-# INLINE [1] hermiteInterp #-}
{-# RULES
"hermiteInterp/Float/0" hermiteInterp (0 :: Float) = 0
"hermiteInterp/Double/0" hermiteInterp (0 :: Double) = 0
"hermiteInterp/Float/1" hermiteInterp (1 :: Float) = 1
"hermiteInterp/Double/1" hermiteInterp (1 :: Double) = 1
#-}
quinticInterp :: (Num a) => a -> a
quinticInterp :: forall a. Num a => a -> a
quinticInterp a
t = a
t a -> a -> a
forall a. Num a => a -> a -> a
* a
t a -> a -> a
forall a. Num a => a -> a -> a
* a
t a -> a -> a
forall a. Num a => a -> a -> a
* (a
t a -> a -> a
forall a. Num a => a -> a -> a
* (a
t a -> a -> a
forall a. Num a => a -> a -> a
* a
6 a -> a -> a
forall a. Num a => a -> a -> a
- a
15) a -> a -> a
forall a. Num a => a -> a -> a
+ a
10)
{-# INLINE [1] quinticInterp #-}
{-# RULES
"quinticInterp/Float/0"
quinticInterp (0 :: Float) =
0
"quinticInterp/Double/0"
quinticInterp (0 :: Double) =
0
"quinticInterp/Float/1"
quinticInterp (1 :: Float) =
1
"quinticInterp/Double/1"
quinticInterp (1 :: Double) =
1
#-}
clamp
:: (Ord a)
=> a
-> a
-> a
-> a
clamp :: forall a. Ord a => a -> a -> a -> a
clamp a
l a
u a
v = a -> a -> a
forall a. Ord a => a -> a -> a
min (a -> a -> a
forall a. Ord a => a -> a -> a
max a
v a
l) a
u
{-# INLINE clamp #-}
primeX, primeY, primeZ :: Hash
primeX :: Hash
primeX = Hash
501125321
{-# INLINE primeX #-}
primeY :: Hash
primeY = Hash
1136930381
{-# INLINE primeY #-}
primeZ :: Hash
primeZ = Hash
1720413743
{-# INLINE primeZ #-}
hash2 :: Seed -> Hash -> Hash -> Hash
hash2 :: Seed -> Hash -> Hash -> Hash
hash2 Seed
seed Hash
xPrimed Hash
yPrimed =
(Seed -> Hash
forall a b. (Integral a, Num b) => a -> b
fromIntegral Seed
seed Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` Hash
xPrimed Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` Hash
yPrimed)
Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
0x27d4eb2d
{-# INLINE hash2 #-}
hash3 :: Seed -> Hash -> Hash -> Hash -> Hash
hash3 :: Seed -> Hash -> Hash -> Hash -> Hash
hash3 Seed
seed Hash
xPrimed Hash
yPrimed Hash
zPrimed =
(Seed -> Hash
forall a b. (Integral a, Num b) => a -> b
fromIntegral Seed
seed Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` Hash
xPrimed Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` Hash
yPrimed Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` Hash
zPrimed)
Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
0x27d4eb2d
{-# INLINE hash3 #-}
infinity :: (Fractional a) => a
infinity :: forall a. Fractional a => a
infinity = a
1 a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
0
{-# INLINE infinity #-}
g2 :: (Fractional a) => a
g2 :: forall a. Fractional a => a
g2 = (a
3 a -> a -> a
forall a. Num a => a -> a -> a
- a
forall a. Fractional a => a
sqrt3) a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
6
{-# INLINE g2 #-}
sqrt3 :: (Fractional a) => a
sqrt3 :: forall a. Fractional a => a
sqrt3 = a
1.7320508075688772935274463415059
{-# INLINE sqrt3 #-}
valCoord2 :: (RealFrac a) => Seed -> Hash -> Hash -> a
valCoord2 :: forall a. RealFrac a => Seed -> Hash -> Hash -> a
valCoord2 Seed
seed Hash
xPrimed Hash
yPrimed =
let !hash :: Hash
hash = Seed -> Hash -> Hash -> Hash
hash2 Seed
seed Hash
xPrimed Hash
yPrimed
!val :: Hash
val = (Hash
hash Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
hash) Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` (Hash
hash Hash -> Int -> Hash
forall a. Bits a => a -> Int -> a
`shiftL` Int
19)
in Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
val a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Fractional a => a -> a
recip (a
forall a. RealFrac a => a
maxHash a -> a -> a
forall a. Num a => a -> a -> a
+ a
1)
{-# INLINE valCoord2 #-}
valCoord3 :: (RealFrac a) => Seed -> Hash -> Hash -> Hash -> a
valCoord3 :: forall a. RealFrac a => Seed -> Hash -> Hash -> Hash -> a
valCoord3 Seed
seed Hash
xPrimed Hash
yPrimed Hash
zPrimed =
let !hash :: Hash
hash = Seed -> Hash -> Hash -> Hash -> Hash
hash3 Seed
seed Hash
xPrimed Hash
yPrimed Hash
zPrimed
!val :: Hash
val = (Hash
hash Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
hash) Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` (Hash
hash Hash -> Int -> Hash
forall a. Bits a => a -> Int -> a
`shiftL` Int
19)
in Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
val a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Fractional a => a -> a
recip (a
forall a. RealFrac a => a
maxHash a -> a -> a
forall a. Num a => a -> a -> a
+ a
1)
{-# INLINE valCoord3 #-}
gradCoord2 :: (RealFrac a) => Seed -> Hash -> Hash -> a -> a -> a
gradCoord2 :: forall a. RealFrac a => Seed -> Hash -> Hash -> a -> a -> a
gradCoord2 Seed
seed Hash
xPrimed Hash
yPrimed a
xd a
yd =
let !hash :: Hash
hash = Seed -> Hash -> Hash -> Hash
hash2 Seed
seed Hash
xPrimed Hash
yPrimed
!ix :: Hash
ix = (Hash
hash Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` (Hash
hash Hash -> Int -> Hash
forall a. Bits a => a -> Int -> a
`shiftR` Int
15)) Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
.&. Hash
0xFE
!xg :: a
xg = Hash -> a
forall a. RealFrac a => Hash -> a
lookupGrad2 Hash
ix
!yg :: a
yg = Hash -> a
forall a. RealFrac a => Hash -> a
lookupGrad2 (Hash
ix Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
.|. Hash
1)
in a
xd a -> a -> a
forall a. Num a => a -> a -> a
* a
xg a -> a -> a
forall a. Num a => a -> a -> a
+ a
yd a -> a -> a
forall a. Num a => a -> a -> a
* a
yg
{-# INLINE [2] gradCoord2 #-}
gradCoord3 :: (RealFrac a) => Seed -> Hash -> Hash -> Hash -> a -> a -> a -> a
gradCoord3 :: forall a.
RealFrac a =>
Seed -> Hash -> Hash -> Hash -> a -> a -> a -> a
gradCoord3 Seed
seed Hash
xPrimed Hash
yPrimed Hash
zPrimed a
xd a
yd a
zd =
let !hash :: Hash
hash = Seed -> Hash -> Hash -> Hash -> Hash
hash3 Seed
seed Hash
xPrimed Hash
yPrimed Hash
zPrimed
!ix :: Hash
ix = (Hash
hash Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
`xor` (Hash
hash Hash -> Int -> Hash
forall a. Bits a => a -> Int -> a
`shiftR` Int
15)) Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
.&. Hash
0xFC
!xg :: a
xg = Hash -> a
forall a. RealFrac a => Hash -> a
lookupGrad3 Hash
ix
!yg :: a
yg = Hash -> a
forall a. RealFrac a => Hash -> a
lookupGrad3 (Hash
ix Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
.|. Hash
1)
!zg :: a
zg = Hash -> a
forall a. RealFrac a => Hash -> a
lookupGrad3 (Hash
ix Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
.|. Hash
2)
in a
xd a -> a -> a
forall a. Num a => a -> a -> a
* a
xg a -> a -> a
forall a. Num a => a -> a -> a
+ a
yd a -> a -> a
forall a. Num a => a -> a -> a
* a
yg a -> a -> a
forall a. Num a => a -> a -> a
+ a
zd a -> a -> a
forall a. Num a => a -> a -> a
* a
zg
{-# INLINE gradCoord3 #-}
maxHash :: (RealFrac a) => a
maxHash :: forall a. RealFrac a => a
maxHash = Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Bounded a => a
maxBound @Hash)
{-# INLINE maxHash #-}
lookupGrad2 :: (RealFrac a) => Hash -> a
lookupGrad2 :: forall a. RealFrac a => Hash -> a
lookupGrad2 = Double -> a
forall a b. (Real a, Fractional b) => a -> b
realToFrac (Double -> a) -> (Hash -> Double) -> Hash -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PrimArray Double
grad2dd PrimArray Double -> Int -> Double
forall a. Prim a => PrimArray a -> Int -> a
`indexPrimArray`) (Int -> Double) -> (Hash -> Int) -> Hash -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Hash -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral
{-# INLINE [0] lookupGrad2 #-}
{-# RULES
"lookupGrad2/Float" forall (i :: Hash).
lookupGrad2 i =
indexPrimArray grad2df (fromIntegral i)
"lookupGrad2/Double" forall (i :: Hash).
lookupGrad2 i =
indexPrimArray grad2dd (fromIntegral i)
#-}
grad2df :: PrimArray Float
grad2df :: PrimArray Float
grad2df = (Double -> Float) -> PrimArray Double -> PrimArray Float
forall a b.
(Prim a, Prim b) =>
(a -> b) -> PrimArray a -> PrimArray b
mapPrimArray Double -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac PrimArray Double
grad2dd
grad2dd :: PrimArray Double
grad2dd :: PrimArray Double
grad2dd =
[ Double
Item (PrimArray Double)
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721,
Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, Double
Item (PrimArray Double)
0.99144486137381 , -Double
0.130526192220051, Double
Item (PrimArray Double)
0.923879532511287, -Double
0.38268343236509,
Double
Item (PrimArray Double)
0.793353340291235, -Double
0.60876142900872 , Double
Item (PrimArray Double)
0.608761429008721, -Double
0.793353340291235, Double
Item (PrimArray Double)
0.38268343236509 , -Double
0.923879532511287, Double
Item (PrimArray Double)
0.130526192220052, -Double
0.99144486137381,
-Double
0.130526192220052, -Double
0.99144486137381 , -Double
0.38268343236509 , -Double
0.923879532511287, -Double
0.608761429008721, -Double
0.793353340291235, -Double
0.793353340291235, -Double
0.608761429008721,
-Double
0.923879532511287, -Double
0.38268343236509 , -Double
0.99144486137381 , -Double
0.130526192220052, -Double
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, -Double
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509,
-Double
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721, -Double
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, -Double
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, -Double
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381,
Double
Item (PrimArray Double)
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721,
Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, Double
Item (PrimArray Double)
0.99144486137381 , -Double
0.130526192220051, Double
Item (PrimArray Double)
0.923879532511287, -Double
0.38268343236509,
Double
Item (PrimArray Double)
0.793353340291235, -Double
0.60876142900872 , Double
Item (PrimArray Double)
0.608761429008721, -Double
0.793353340291235, Double
Item (PrimArray Double)
0.38268343236509 , -Double
0.923879532511287, Double
Item (PrimArray Double)
0.130526192220052, -Double
0.99144486137381,
-Double
0.130526192220052, -Double
0.99144486137381 , -Double
0.38268343236509 , -Double
0.923879532511287, -Double
0.608761429008721, -Double
0.793353340291235, -Double
0.793353340291235, -Double
0.608761429008721,
-Double
0.923879532511287, -Double
0.38268343236509 , -Double
0.99144486137381 , -Double
0.130526192220052, -Double
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, -Double
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509,
-Double
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721, -Double
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, -Double
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, -Double
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381,
Double
Item (PrimArray Double)
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721,
Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, Double
Item (PrimArray Double)
0.99144486137381 , -Double
0.130526192220051, Double
Item (PrimArray Double)
0.923879532511287, -Double
0.38268343236509,
Double
Item (PrimArray Double)
0.793353340291235, -Double
0.60876142900872 , Double
Item (PrimArray Double)
0.608761429008721, -Double
0.793353340291235, Double
Item (PrimArray Double)
0.38268343236509 , -Double
0.923879532511287, Double
Item (PrimArray Double)
0.130526192220052, -Double
0.99144486137381,
-Double
0.130526192220052, -Double
0.99144486137381 , -Double
0.38268343236509 , -Double
0.923879532511287, -Double
0.608761429008721, -Double
0.793353340291235, -Double
0.793353340291235, -Double
0.608761429008721,
-Double
0.923879532511287, -Double
0.38268343236509 , -Double
0.99144486137381 , -Double
0.130526192220052, -Double
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, -Double
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509,
-Double
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721, -Double
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, -Double
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, -Double
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381,
Double
Item (PrimArray Double)
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721,
Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, Double
Item (PrimArray Double)
0.99144486137381 , -Double
0.130526192220051, Double
Item (PrimArray Double)
0.923879532511287, -Double
0.38268343236509,
Double
Item (PrimArray Double)
0.793353340291235, -Double
0.60876142900872 , Double
Item (PrimArray Double)
0.608761429008721, -Double
0.793353340291235, Double
Item (PrimArray Double)
0.38268343236509 , -Double
0.923879532511287, Double
Item (PrimArray Double)
0.130526192220052, -Double
0.99144486137381,
-Double
0.130526192220052, -Double
0.99144486137381 , -Double
0.38268343236509 , -Double
0.923879532511287, -Double
0.608761429008721, -Double
0.793353340291235, -Double
0.793353340291235, -Double
0.608761429008721,
-Double
0.923879532511287, -Double
0.38268343236509 , -Double
0.99144486137381 , -Double
0.130526192220052, -Double
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, -Double
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509,
-Double
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721, -Double
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, -Double
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, -Double
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381,
Double
Item (PrimArray Double)
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721,
Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, Double
Item (PrimArray Double)
0.99144486137381 , -Double
0.130526192220051, Double
Item (PrimArray Double)
0.923879532511287, -Double
0.38268343236509,
Double
Item (PrimArray Double)
0.793353340291235, -Double
0.60876142900872 , Double
Item (PrimArray Double)
0.608761429008721, -Double
0.793353340291235, Double
Item (PrimArray Double)
0.38268343236509 , -Double
0.923879532511287, Double
Item (PrimArray Double)
0.130526192220052, -Double
0.99144486137381,
-Double
0.130526192220052, -Double
0.99144486137381 , -Double
0.38268343236509 , -Double
0.923879532511287, -Double
0.608761429008721, -Double
0.793353340291235, -Double
0.793353340291235, -Double
0.608761429008721,
-Double
0.923879532511287, -Double
0.38268343236509 , -Double
0.99144486137381 , -Double
0.130526192220052, -Double
0.99144486137381 , Double
Item (PrimArray Double)
0.130526192220051, -Double
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509,
-Double
0.793353340291235, Double
Item (PrimArray Double)
0.608761429008721, -Double
0.608761429008721, Double
Item (PrimArray Double)
0.793353340291235, -Double
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, -Double
0.130526192220052, Double
Item (PrimArray Double)
0.99144486137381,
Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287, -Double
0.38268343236509 , Double
Item (PrimArray Double)
0.38268343236509 , -Double
0.923879532511287,
-Double
0.38268343236509 , -Double
0.923879532511287, -Double
0.923879532511287, -Double
0.38268343236509 , -Double
0.923879532511287, Double
Item (PrimArray Double)
0.38268343236509 , -Double
0.38268343236509 , Double
Item (PrimArray Double)
0.923879532511287
]
lookupGrad3 :: (RealFrac a) => Hash -> a
lookupGrad3 :: forall a. RealFrac a => Hash -> a
lookupGrad3 = Double -> a
forall a b. (Real a, Fractional b) => a -> b
realToFrac (Double -> a) -> (Hash -> Double) -> Hash -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PrimArray Double
grad3dd PrimArray Double -> Int -> Double
forall a. Prim a => PrimArray a -> Int -> a
`indexPrimArray`) (Int -> Double) -> (Hash -> Int) -> Hash -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Hash -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral
{-# INLINE [0] lookupGrad3 #-}
{-# RULES
"lookupGrad3/Float" forall (i :: Hash).
lookupGrad3 i =
indexPrimArray grad3df (fromIntegral i)
"lookupGrad3/Double" forall (i :: Hash).
lookupGrad3 i =
indexPrimArray grad3dd (fromIntegral i)
#-}
grad3df :: PrimArray Float
grad3df :: PrimArray Float
grad3df = (Double -> Float) -> PrimArray Double -> PrimArray Float
forall a b.
(Prim a, Prim b) =>
(a -> b) -> PrimArray a -> PrimArray b
mapPrimArray Double -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac PrimArray Double
grad3dd
grad3dd :: PrimArray Double
grad3dd :: PrimArray Double
grad3dd =
[ Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0
, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, -Double
1, Double
Item (PrimArray Double)
1, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, Double
Item (PrimArray Double)
0, -Double
1, -Double
1, Double
Item (PrimArray Double)
0
]