{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module Numeric.Noise.Cellular (
CellularConfig (..),
defaultCellularConfig,
CellularDistanceFn (..),
CellularResult (..),
noise2,
) where
import Data.Bits
import Data.Foldable (foldl')
import Data.Primitive.PrimArray
import GHC.Generics (Generic)
import Numeric.Noise.Internal
import Numeric.Noise.Internal.Math
data CellularConfig a = CellularConfig
{ forall a. CellularConfig a -> CellularDistanceFn
cellularDistanceFn :: CellularDistanceFn
, forall a. CellularConfig a -> a
cellularJitter :: a
, forall a. CellularConfig a -> CellularResult
cellularResult :: CellularResult
}
deriving ((forall x. CellularConfig a -> Rep (CellularConfig a) x)
-> (forall x. Rep (CellularConfig a) x -> CellularConfig a)
-> Generic (CellularConfig a)
forall x. Rep (CellularConfig a) x -> CellularConfig a
forall x. CellularConfig a -> Rep (CellularConfig a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (CellularConfig a) x -> CellularConfig a
forall a x. CellularConfig a -> Rep (CellularConfig a) x
$cfrom :: forall a x. CellularConfig a -> Rep (CellularConfig a) x
from :: forall x. CellularConfig a -> Rep (CellularConfig a) x
$cto :: forall a x. Rep (CellularConfig a) x -> CellularConfig a
to :: forall x. Rep (CellularConfig a) x -> CellularConfig a
Generic, Int -> CellularConfig a -> ShowS
[CellularConfig a] -> ShowS
CellularConfig a -> String
(Int -> CellularConfig a -> ShowS)
-> (CellularConfig a -> String)
-> ([CellularConfig a] -> ShowS)
-> Show (CellularConfig a)
forall a. Show a => Int -> CellularConfig a -> ShowS
forall a. Show a => [CellularConfig a] -> ShowS
forall a. Show a => CellularConfig a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> CellularConfig a -> ShowS
showsPrec :: Int -> CellularConfig a -> ShowS
$cshow :: forall a. Show a => CellularConfig a -> String
show :: CellularConfig a -> String
$cshowList :: forall a. Show a => [CellularConfig a] -> ShowS
showList :: [CellularConfig a] -> ShowS
Show)
defaultCellularConfig :: (RealFrac a) => CellularConfig a
defaultCellularConfig :: forall a. RealFrac a => CellularConfig a
defaultCellularConfig =
CellularConfig
{ cellularDistanceFn :: CellularDistanceFn
cellularDistanceFn = CellularDistanceFn
DistEuclidean
, cellularJitter :: a
cellularJitter = a
1
, cellularResult :: CellularResult
cellularResult = CellularResult
CellValue
}
{-# INLINEABLE defaultCellularConfig #-}
data CellularDistanceFn
=
DistEuclidean
|
DistEuclideanSq
|
DistManhattan
|
DistHybrid
deriving ((forall x. CellularDistanceFn -> Rep CellularDistanceFn x)
-> (forall x. Rep CellularDistanceFn x -> CellularDistanceFn)
-> Generic CellularDistanceFn
forall x. Rep CellularDistanceFn x -> CellularDistanceFn
forall x. CellularDistanceFn -> Rep CellularDistanceFn x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CellularDistanceFn -> Rep CellularDistanceFn x
from :: forall x. CellularDistanceFn -> Rep CellularDistanceFn x
$cto :: forall x. Rep CellularDistanceFn x -> CellularDistanceFn
to :: forall x. Rep CellularDistanceFn x -> CellularDistanceFn
Generic, ReadPrec [CellularDistanceFn]
ReadPrec CellularDistanceFn
Int -> ReadS CellularDistanceFn
ReadS [CellularDistanceFn]
(Int -> ReadS CellularDistanceFn)
-> ReadS [CellularDistanceFn]
-> ReadPrec CellularDistanceFn
-> ReadPrec [CellularDistanceFn]
-> Read CellularDistanceFn
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS CellularDistanceFn
readsPrec :: Int -> ReadS CellularDistanceFn
$creadList :: ReadS [CellularDistanceFn]
readList :: ReadS [CellularDistanceFn]
$creadPrec :: ReadPrec CellularDistanceFn
readPrec :: ReadPrec CellularDistanceFn
$creadListPrec :: ReadPrec [CellularDistanceFn]
readListPrec :: ReadPrec [CellularDistanceFn]
Read, Int -> CellularDistanceFn -> ShowS
[CellularDistanceFn] -> ShowS
CellularDistanceFn -> String
(Int -> CellularDistanceFn -> ShowS)
-> (CellularDistanceFn -> String)
-> ([CellularDistanceFn] -> ShowS)
-> Show CellularDistanceFn
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CellularDistanceFn -> ShowS
showsPrec :: Int -> CellularDistanceFn -> ShowS
$cshow :: CellularDistanceFn -> String
show :: CellularDistanceFn -> String
$cshowList :: [CellularDistanceFn] -> ShowS
showList :: [CellularDistanceFn] -> ShowS
Show, CellularDistanceFn -> CellularDistanceFn -> Bool
(CellularDistanceFn -> CellularDistanceFn -> Bool)
-> (CellularDistanceFn -> CellularDistanceFn -> Bool)
-> Eq CellularDistanceFn
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CellularDistanceFn -> CellularDistanceFn -> Bool
== :: CellularDistanceFn -> CellularDistanceFn -> Bool
$c/= :: CellularDistanceFn -> CellularDistanceFn -> Bool
/= :: CellularDistanceFn -> CellularDistanceFn -> Bool
Eq, Eq CellularDistanceFn
Eq CellularDistanceFn =>
(CellularDistanceFn -> CellularDistanceFn -> Ordering)
-> (CellularDistanceFn -> CellularDistanceFn -> Bool)
-> (CellularDistanceFn -> CellularDistanceFn -> Bool)
-> (CellularDistanceFn -> CellularDistanceFn -> Bool)
-> (CellularDistanceFn -> CellularDistanceFn -> Bool)
-> (CellularDistanceFn -> CellularDistanceFn -> CellularDistanceFn)
-> (CellularDistanceFn -> CellularDistanceFn -> CellularDistanceFn)
-> Ord CellularDistanceFn
CellularDistanceFn -> CellularDistanceFn -> Bool
CellularDistanceFn -> CellularDistanceFn -> Ordering
CellularDistanceFn -> CellularDistanceFn -> CellularDistanceFn
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CellularDistanceFn -> CellularDistanceFn -> Ordering
compare :: CellularDistanceFn -> CellularDistanceFn -> Ordering
$c< :: CellularDistanceFn -> CellularDistanceFn -> Bool
< :: CellularDistanceFn -> CellularDistanceFn -> Bool
$c<= :: CellularDistanceFn -> CellularDistanceFn -> Bool
<= :: CellularDistanceFn -> CellularDistanceFn -> Bool
$c> :: CellularDistanceFn -> CellularDistanceFn -> Bool
> :: CellularDistanceFn -> CellularDistanceFn -> Bool
$c>= :: CellularDistanceFn -> CellularDistanceFn -> Bool
>= :: CellularDistanceFn -> CellularDistanceFn -> Bool
$cmax :: CellularDistanceFn -> CellularDistanceFn -> CellularDistanceFn
max :: CellularDistanceFn -> CellularDistanceFn -> CellularDistanceFn
$cmin :: CellularDistanceFn -> CellularDistanceFn -> CellularDistanceFn
min :: CellularDistanceFn -> CellularDistanceFn -> CellularDistanceFn
Ord, Int -> CellularDistanceFn
CellularDistanceFn -> Int
CellularDistanceFn -> [CellularDistanceFn]
CellularDistanceFn -> CellularDistanceFn
CellularDistanceFn -> CellularDistanceFn -> [CellularDistanceFn]
CellularDistanceFn
-> CellularDistanceFn -> CellularDistanceFn -> [CellularDistanceFn]
(CellularDistanceFn -> CellularDistanceFn)
-> (CellularDistanceFn -> CellularDistanceFn)
-> (Int -> CellularDistanceFn)
-> (CellularDistanceFn -> Int)
-> (CellularDistanceFn -> [CellularDistanceFn])
-> (CellularDistanceFn
-> CellularDistanceFn -> [CellularDistanceFn])
-> (CellularDistanceFn
-> CellularDistanceFn -> [CellularDistanceFn])
-> (CellularDistanceFn
-> CellularDistanceFn
-> CellularDistanceFn
-> [CellularDistanceFn])
-> Enum CellularDistanceFn
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: CellularDistanceFn -> CellularDistanceFn
succ :: CellularDistanceFn -> CellularDistanceFn
$cpred :: CellularDistanceFn -> CellularDistanceFn
pred :: CellularDistanceFn -> CellularDistanceFn
$ctoEnum :: Int -> CellularDistanceFn
toEnum :: Int -> CellularDistanceFn
$cfromEnum :: CellularDistanceFn -> Int
fromEnum :: CellularDistanceFn -> Int
$cenumFrom :: CellularDistanceFn -> [CellularDistanceFn]
enumFrom :: CellularDistanceFn -> [CellularDistanceFn]
$cenumFromThen :: CellularDistanceFn -> CellularDistanceFn -> [CellularDistanceFn]
enumFromThen :: CellularDistanceFn -> CellularDistanceFn -> [CellularDistanceFn]
$cenumFromTo :: CellularDistanceFn -> CellularDistanceFn -> [CellularDistanceFn]
enumFromTo :: CellularDistanceFn -> CellularDistanceFn -> [CellularDistanceFn]
$cenumFromThenTo :: CellularDistanceFn
-> CellularDistanceFn -> CellularDistanceFn -> [CellularDistanceFn]
enumFromThenTo :: CellularDistanceFn
-> CellularDistanceFn -> CellularDistanceFn -> [CellularDistanceFn]
Enum, CellularDistanceFn
CellularDistanceFn
-> CellularDistanceFn -> Bounded CellularDistanceFn
forall a. a -> a -> Bounded a
$cminBound :: CellularDistanceFn
minBound :: CellularDistanceFn
$cmaxBound :: CellularDistanceFn
maxBound :: CellularDistanceFn
Bounded)
data CellularResult
=
CellValue
|
Distance
|
Distance2
|
Distance2Add
|
Distance2Sub
|
Distance2Mul
|
Distance2Div
deriving ((forall x. CellularResult -> Rep CellularResult x)
-> (forall x. Rep CellularResult x -> CellularResult)
-> Generic CellularResult
forall x. Rep CellularResult x -> CellularResult
forall x. CellularResult -> Rep CellularResult x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CellularResult -> Rep CellularResult x
from :: forall x. CellularResult -> Rep CellularResult x
$cto :: forall x. Rep CellularResult x -> CellularResult
to :: forall x. Rep CellularResult x -> CellularResult
Generic, ReadPrec [CellularResult]
ReadPrec CellularResult
Int -> ReadS CellularResult
ReadS [CellularResult]
(Int -> ReadS CellularResult)
-> ReadS [CellularResult]
-> ReadPrec CellularResult
-> ReadPrec [CellularResult]
-> Read CellularResult
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS CellularResult
readsPrec :: Int -> ReadS CellularResult
$creadList :: ReadS [CellularResult]
readList :: ReadS [CellularResult]
$creadPrec :: ReadPrec CellularResult
readPrec :: ReadPrec CellularResult
$creadListPrec :: ReadPrec [CellularResult]
readListPrec :: ReadPrec [CellularResult]
Read, Int -> CellularResult -> ShowS
[CellularResult] -> ShowS
CellularResult -> String
(Int -> CellularResult -> ShowS)
-> (CellularResult -> String)
-> ([CellularResult] -> ShowS)
-> Show CellularResult
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CellularResult -> ShowS
showsPrec :: Int -> CellularResult -> ShowS
$cshow :: CellularResult -> String
show :: CellularResult -> String
$cshowList :: [CellularResult] -> ShowS
showList :: [CellularResult] -> ShowS
Show, CellularResult -> CellularResult -> Bool
(CellularResult -> CellularResult -> Bool)
-> (CellularResult -> CellularResult -> Bool) -> Eq CellularResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CellularResult -> CellularResult -> Bool
== :: CellularResult -> CellularResult -> Bool
$c/= :: CellularResult -> CellularResult -> Bool
/= :: CellularResult -> CellularResult -> Bool
Eq, Eq CellularResult
Eq CellularResult =>
(CellularResult -> CellularResult -> Ordering)
-> (CellularResult -> CellularResult -> Bool)
-> (CellularResult -> CellularResult -> Bool)
-> (CellularResult -> CellularResult -> Bool)
-> (CellularResult -> CellularResult -> Bool)
-> (CellularResult -> CellularResult -> CellularResult)
-> (CellularResult -> CellularResult -> CellularResult)
-> Ord CellularResult
CellularResult -> CellularResult -> Bool
CellularResult -> CellularResult -> Ordering
CellularResult -> CellularResult -> CellularResult
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CellularResult -> CellularResult -> Ordering
compare :: CellularResult -> CellularResult -> Ordering
$c< :: CellularResult -> CellularResult -> Bool
< :: CellularResult -> CellularResult -> Bool
$c<= :: CellularResult -> CellularResult -> Bool
<= :: CellularResult -> CellularResult -> Bool
$c> :: CellularResult -> CellularResult -> Bool
> :: CellularResult -> CellularResult -> Bool
$c>= :: CellularResult -> CellularResult -> Bool
>= :: CellularResult -> CellularResult -> Bool
$cmax :: CellularResult -> CellularResult -> CellularResult
max :: CellularResult -> CellularResult -> CellularResult
$cmin :: CellularResult -> CellularResult -> CellularResult
min :: CellularResult -> CellularResult -> CellularResult
Ord, Int -> CellularResult
CellularResult -> Int
CellularResult -> [CellularResult]
CellularResult -> CellularResult
CellularResult -> CellularResult -> [CellularResult]
CellularResult
-> CellularResult -> CellularResult -> [CellularResult]
(CellularResult -> CellularResult)
-> (CellularResult -> CellularResult)
-> (Int -> CellularResult)
-> (CellularResult -> Int)
-> (CellularResult -> [CellularResult])
-> (CellularResult -> CellularResult -> [CellularResult])
-> (CellularResult -> CellularResult -> [CellularResult])
-> (CellularResult
-> CellularResult -> CellularResult -> [CellularResult])
-> Enum CellularResult
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: CellularResult -> CellularResult
succ :: CellularResult -> CellularResult
$cpred :: CellularResult -> CellularResult
pred :: CellularResult -> CellularResult
$ctoEnum :: Int -> CellularResult
toEnum :: Int -> CellularResult
$cfromEnum :: CellularResult -> Int
fromEnum :: CellularResult -> Int
$cenumFrom :: CellularResult -> [CellularResult]
enumFrom :: CellularResult -> [CellularResult]
$cenumFromThen :: CellularResult -> CellularResult -> [CellularResult]
enumFromThen :: CellularResult -> CellularResult -> [CellularResult]
$cenumFromTo :: CellularResult -> CellularResult -> [CellularResult]
enumFromTo :: CellularResult -> CellularResult -> [CellularResult]
$cenumFromThenTo :: CellularResult
-> CellularResult -> CellularResult -> [CellularResult]
enumFromThenTo :: CellularResult
-> CellularResult -> CellularResult -> [CellularResult]
Enum, CellularResult
CellularResult -> CellularResult -> Bounded CellularResult
forall a. a -> a -> Bounded a
$cminBound :: CellularResult
minBound :: CellularResult
$cmaxBound :: CellularResult
maxBound :: CellularResult
Bounded)
distance :: (RealFrac a) => CellularDistanceFn -> a -> a -> a
distance :: forall a. RealFrac a => CellularDistanceFn -> a -> a -> a
distance = \case
CellularDistanceFn
DistEuclidean -> \ !a
x !a
y -> a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
x a -> a -> a
forall a. Num a => a -> a -> a
+ a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
y
CellularDistanceFn
DistEuclideanSq -> \ !a
x !a
y -> a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
x a -> a -> a
forall a. Num a => a -> a -> a
+ a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
y
CellularDistanceFn
DistManhattan -> \ !a
x !a
y -> a -> a
forall a. Num a => a -> a
abs a
x a -> a -> a
forall a. Num a => a -> a -> a
+ a -> a
forall a. Num a => a -> a
abs a
y
CellularDistanceFn
DistHybrid -> \ !a
x !a
y -> a -> a
forall a. Num a => a -> a
abs a
x a -> a -> a
forall a. Num a => a -> a -> a
+ a -> a
forall a. Num a => a -> a
abs a
y a -> a -> a
forall a. Num a => a -> a -> a
+ (a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
x a -> a -> a
forall a. Num a => a -> a -> a
+ a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
y)
{-# INLINE distance #-}
normDist :: (Floating a) => CellularDistanceFn -> a -> a
normDist :: forall a. Floating a => CellularDistanceFn -> a -> a
normDist = \case
CellularDistanceFn
DistEuclidean -> a -> a
forall a. Floating a => a -> a
sqrt
CellularDistanceFn
_ -> a -> a
forall a. a -> a
id
{-# INLINE normDist #-}
noise2 :: (RealFrac a, Floating a) => CellularConfig a -> Noise2 a
noise2 :: forall a. (RealFrac a, Floating a) => CellularConfig a -> Noise2 a
noise2 CellularConfig{a
CellularResult
CellularDistanceFn
cellularDistanceFn :: forall a. CellularConfig a -> CellularDistanceFn
cellularJitter :: forall a. CellularConfig a -> a
cellularResult :: forall a. CellularConfig a -> CellularResult
cellularDistanceFn :: CellularDistanceFn
cellularJitter :: a
cellularResult :: CellularResult
..} = (Seed -> a -> a -> a) -> Noise2' a a
forall p v. (Seed -> p -> p -> v) -> Noise2' p v
mkNoise2 ((Seed -> a -> a -> a) -> Noise2' a a)
-> (Seed -> a -> a -> a) -> Noise2' a a
forall a b. (a -> b) -> a -> b
$ \ !Seed
seed !a
x !a
y ->
let !jitter :: a
jitter = a
cellularJitter a -> a -> a
forall a. Num a => a -> a -> a
* a
0.43701595
!rx :: Hash
rx = a -> Hash
forall b. Integral b => a -> b
forall a b. (RealFrac a, Integral b) => a -> b
round a
x
!ry :: Hash
ry = a -> Hash
forall b. Integral b => a -> b
forall a b. (RealFrac a, Integral b) => a -> b
round a
y
dist :: a -> a -> a
dist = CellularDistanceFn -> a -> a -> a
forall a. RealFrac a => CellularDistanceFn -> a -> a -> a
distance CellularDistanceFn
cellularDistanceFn
norm :: a -> a
norm = CellularDistanceFn -> a -> a
forall a. Floating a => CellularDistanceFn -> a -> a
normDist CellularDistanceFn
cellularDistanceFn
coeff :: a
coeff = a
1 a -> a -> a
forall a. Fractional a => a -> a -> a
/ (a
forall a. RealFrac a => a
maxHash a -> a -> a
forall a. Num a => a -> a -> a
+ a
1)
{-# INLINE pointDist #-}
pointDist :: Hash -> Hash -> (Hash, a)
pointDist !Hash
xi !Hash
yi =
let !px :: a
px = Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
xi a -> a -> a
forall a. Num a => a -> a -> a
- a
x
!py :: a
py = Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
yi a -> a -> a
forall a. Num a => a -> a -> a
- a
y
!h :: Hash
h = Seed -> Hash -> Hash -> Hash
hash2 Seed
seed (Hash
primeX Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
xi) (Hash
primeY Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
* Hash
yi)
!i :: Hash
i = Hash
h Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
.&. Hash
0x1FE
!rvx :: a
rvx = Hash -> a
forall a. RealFrac a => Hash -> a
lookupRandVec2d Hash
i
!rvy :: a
rvy = Hash -> a
forall a. RealFrac a => Hash -> a
lookupRandVec2d (Hash
i Hash -> Hash -> Hash
forall a. Bits a => a -> a -> a
.|. Hash
1)
!d :: a
d = a -> a -> a
dist (a
px a -> a -> a
forall a. Num a => a -> a -> a
+ a
rvx a -> a -> a
forall a. Num a => a -> a -> a
* a
jitter) (a
py a -> a -> a
forall a. Num a => a -> a -> a
+ a
rvy a -> a -> a
forall a. Num a => a -> a -> a
* a
jitter)
in (Hash
h, a
d)
{-# INLINE points #-}
points :: [(Hash, a)]
points = [Hash -> Hash -> (Hash, a)
pointDist (Hash
rx Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
+ Hash
xi) (Hash
ry Hash -> Hash -> Hash
forall a. Num a => a -> a -> a
+ Hash
yi) | !Hash
xi <- [-Hash
1 .. Hash
Item [Hash]
1], !Hash
yi <- [-Hash
1 .. Hash
Item [Hash]
1]]
{-# INLINE selectMinHash #-}
selectMinHash :: (Hash, a)
selectMinHash =
let minHash :: (a, b) -> (a, b) -> (a, b)
minHash (!a
hMin, !b
dMin) (!a
h, !b
d)
| b
d b -> b -> Bool
forall a. Ord a => a -> a -> Bool
< b
dMin = (a
h, b
d)
| Bool
otherwise = (a
hMin, b
dMin)
in ((Hash, a) -> (Hash, a) -> (Hash, a))
-> (Hash, a) -> [(Hash, a)] -> (Hash, a)
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (Hash, a) -> (Hash, a) -> (Hash, a)
forall {b} {a}. Ord b => (a, b) -> (a, b) -> (a, b)
minHash (Hash
0, a
forall a. Fractional a => a
infinity) [(Hash, a)]
points
{-# INLINE selectMinDist #-}
selectMinDist :: a
selectMinDist =
let minDist :: a -> (a, a) -> a
minDist !a
dMin (a
_, !a
d)
| a
d a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
dMin = a
d
| Bool
otherwise = a
dMin
in (a -> (Hash, a) -> a) -> a -> [(Hash, a)] -> a
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' a -> (Hash, a) -> a
forall {a} {a}. Ord a => a -> (a, a) -> a
minDist a
forall a. Fractional a => a
infinity [(Hash, a)]
points
{-# INLINE selectSmallestTwo #-}
selectSmallestTwo :: (Hash, a, a)
selectSmallestTwo =
let smallestTwo :: (a, a, a) -> (a, a) -> (a, a, a)
smallestTwo (!a
c, !a
d0, !a
d1) (!a
h, !a
d)
| a
d a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
d0 = (a
h, a
d, a
d0)
| a
d a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
d1 = (a
c, a
d0, a
d)
| Bool
otherwise = (a
c, a
d0, a
d1)
in ((Hash, a, a) -> (Hash, a) -> (Hash, a, a))
-> (Hash, a, a) -> [(Hash, a)] -> (Hash, a, a)
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (Hash, a, a) -> (Hash, a) -> (Hash, a, a)
forall {a} {a}. Ord a => (a, a, a) -> (a, a) -> (a, a, a)
smallestTwo (Hash
0, a
forall a. Fractional a => a
infinity, a
forall a. Fractional a => a
infinity) [(Hash, a)]
points
in case CellularResult
cellularResult of
CellularResult
CellValue ->
let (!Hash
hash, !a
_) = (Hash, a)
selectMinHash
in Hash -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Hash
hash a -> a -> a
forall a. Num a => a -> a -> a
* a
coeff
CellularResult
Distance ->
let !d0 :: a
d0 = a
selectMinDist
in a -> a
norm a
d0 a -> a -> a
forall a. Num a => a -> a -> a
- a
1
CellularResult
Distance2 ->
let (!Hash
_, !a
_, !a
d1) = (Hash, a, a)
selectSmallestTwo
in a -> a
norm a
d1 a -> a -> a
forall a. Num a => a -> a -> a
- a
1
CellularResult
Distance2Add ->
let (!Hash
_, !a
d0, !a
d1) = (Hash, a, a)
selectSmallestTwo
in (a -> a
norm a
d1 a -> a -> a
forall a. Num a => a -> a -> a
+ a -> a
norm a
d0) a -> a -> a
forall a. Num a => a -> a -> a
* a
0.5 a -> a -> a
forall a. Num a => a -> a -> a
- a
1
CellularResult
Distance2Sub ->
let (!Hash
_, !a
d0, !a
d1) = (Hash, a, a)
selectSmallestTwo
in a -> a
norm a
d1 a -> a -> a
forall a. Num a => a -> a -> a
- a -> a
norm a
d0 a -> a -> a
forall a. Num a => a -> a -> a
- a
1
CellularResult
Distance2Mul ->
let (!Hash
_, !a
d0, !a
d1) = (Hash, a, a)
selectSmallestTwo
in a -> a
norm a
d1 a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
norm a
d0 a -> a -> a
forall a. Num a => a -> a -> a
* a
0.5 a -> a -> a
forall a. Num a => a -> a -> a
- a
1
CellularResult
Distance2Div ->
let (!Hash
_, !a
d0, !a
d1) = (Hash, a, a)
selectSmallestTwo
in a -> a
norm a
d0 a -> a -> a
forall a. Fractional a => a -> a -> a
/ a -> a
norm a
d1 a -> a -> a
forall a. Num a => a -> a -> a
- a
1
{-# INLINE [2] noise2 #-}
lookupRandVec2d :: (RealFrac a) => Hash -> a
lookupRandVec2d :: forall a. RealFrac a => Hash -> a
lookupRandVec2d = 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 -> Int -> Double
forall a. Prim a => PrimArray a -> Int -> a
indexPrimArray PrimArray Double
randVecs2dd (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
{-# NOINLINE [1] lookupRandVec2d #-}
{-# RULES
"lookupRandVec2d/Float" forall h.
lookupRandVec2d h =
indexPrimArray randVecs2df (fromIntegral h)
"lookupRandVec2d/Double" forall h.
lookupRandVec2d h =
indexPrimArray randVecs2dd (fromIntegral h)
#-}
randVecs2df :: PrimArray Float
randVecs2df :: PrimArray Float
randVecs2df = (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
randVecs2dd
randVecs2dd :: PrimArray Double
randVecs2dd :: PrimArray Double
randVecs2dd =
[-Double
0.2700222198,-Double
0.9628540911,Double
Item (PrimArray Double)
0.3863092627,-Double
0.9223693152,Double
Item (PrimArray Double)
0.04444859006,-Double
0.999011673,-Double
0.5992523158,-Double
0.8005602176
,-Double
0.7819280288,Double
Item (PrimArray Double)
0.6233687174,Double
Item (PrimArray Double)
0.9464672271,Double
Item (PrimArray Double)
0.3227999196,-Double
0.6514146797,-Double
0.7587218957,Double
Item (PrimArray Double)
0.9378472289,Double
Item (PrimArray Double)
0.347048376
,-Double
0.8497875957,-Double
0.5271252623,-Double
0.879042592,Double
Item (PrimArray Double)
0.4767432447,-Double
0.892300288,-Double
0.4514423508,-Double
0.379844434,-Double
0.9250503802
,-Double
0.9951650832,Double
Item (PrimArray Double)
0.0982163789,Double
Item (PrimArray Double)
0.7724397808,-Double
0.6350880136,Double
Item (PrimArray Double)
0.7573283322,-Double
0.6530343002,-Double
0.9928004525,-Double
0.119780055
,-Double
0.0532665713,Double
Item (PrimArray Double)
0.9985803285,Double
Item (PrimArray Double)
0.9754253726,-Double
0.2203300762,-Double
0.7665018163,Double
Item (PrimArray Double)
0.6422421394,Double
Item (PrimArray Double)
0.991636706,Double
Item (PrimArray Double)
0.1290606184
,-Double
0.994696838,Double
Item (PrimArray Double)
0.1028503788,-Double
0.5379205513,-Double
0.84299554,Double
Item (PrimArray Double)
0.5022815471,-Double
0.8647041387,Double
Item (PrimArray Double)
0.4559821461,-Double
0.8899889226
,-Double
0.8659131224,-Double
0.5001944266,Double
Item (PrimArray Double)
0.0879458407,-Double
0.9961252577,-Double
0.5051684983,Double
Item (PrimArray Double)
0.8630207346,Double
Item (PrimArray Double)
0.7753185226,-Double
0.6315704146
,-Double
0.6921944612,Double
Item (PrimArray Double)
0.7217110418,-Double
0.5191659449,-Double
0.8546734591,Double
Item (PrimArray Double)
0.8978622882,-Double
0.4402764035,-Double
0.1706774107,Double
Item (PrimArray Double)
0.9853269617
,-Double
0.9353430106,-Double
0.3537420705,-Double
0.9992404798,Double
Item (PrimArray Double)
0.03896746794,-Double
0.2882064021,-Double
0.9575683108,-Double
0.9663811329,Double
Item (PrimArray Double)
0.2571137995
,-Double
0.8759714238,-Double
0.4823630009,-Double
0.8303123018,-Double
0.5572983775,Double
Item (PrimArray Double)
0.05110133755,-Double
0.9986934731,-Double
0.8558373281,-Double
0.5172450752
,Double
Item (PrimArray Double)
0.09887025282,Double
Item (PrimArray Double)
0.9951003332,Double
Item (PrimArray Double)
0.9189016087,Double
Item (PrimArray Double)
0.3944867976,-Double
0.2439375892,-Double
0.9697909324,-Double
0.8121409387,-Double
0.5834613061
,-Double
0.9910431363,Double
Item (PrimArray Double)
0.1335421355,Double
Item (PrimArray Double)
0.8492423985,-Double
0.5280031709,-Double
0.9717838994,-Double
0.2358729591,Double
Item (PrimArray Double)
0.9949457207,Double
Item (PrimArray Double)
0.1004142068
,Double
Item (PrimArray Double)
0.6241065508,-Double
0.7813392434,Double
Item (PrimArray Double)
0.662910307,Double
Item (PrimArray Double)
0.7486988212,-Double
0.7197418176,Double
Item (PrimArray Double)
0.6942418282,-Double
0.8143370775,-Double
0.5803922158
,Double
Item (PrimArray Double)
0.104521054,-Double
0.9945226741,-Double
0.1065926113,-Double
0.9943027784,Double
Item (PrimArray Double)
0.445799684,-Double
0.8951327509,Double
Item (PrimArray Double)
0.105547406,Double
Item (PrimArray Double)
0.9944142724
,-Double
0.992790267,Double
Item (PrimArray Double)
0.1198644477,-Double
0.8334366408,Double
Item (PrimArray Double)
0.552615025,Double
Item (PrimArray Double)
0.9115561563,-Double
0.4111755999,Double
Item (PrimArray Double)
0.8285544909,-Double
0.5599084351
,Double
Item (PrimArray Double)
0.7217097654,-Double
0.6921957921,Double
Item (PrimArray Double)
0.4940492677,-Double
0.8694339084,-Double
0.3652321272,-Double
0.9309164803,-Double
0.9696606758,Double
Item (PrimArray Double)
0.2444548501
,Double
Item (PrimArray Double)
0.08925509731,-Double
0.996008799,Double
Item (PrimArray Double)
0.5354071276,-Double
0.8445941083,-Double
0.1053576186,Double
Item (PrimArray Double)
0.9944343981,-Double
0.9890284586,Double
Item (PrimArray Double)
0.1477251101
,Double
Item (PrimArray Double)
0.004856104961,Double
Item (PrimArray Double)
0.9999882091,Double
Item (PrimArray Double)
0.9885598478,Double
Item (PrimArray Double)
0.1508291331,Double
Item (PrimArray Double)
0.9286129562,-Double
0.3710498316,-Double
0.5832393863,-Double
0.8123003252
,Double
Item (PrimArray Double)
0.3015207509,Double
Item (PrimArray Double)
0.9534596146,-Double
0.9575110528,Double
Item (PrimArray Double)
0.2883965738,Double
Item (PrimArray Double)
0.9715802154,-Double
0.2367105511,Double
Item (PrimArray Double)
0.229981792,Double
Item (PrimArray Double)
0.9731949318
,Double
Item (PrimArray Double)
0.955763816,-Double
0.2941352207,Double
Item (PrimArray Double)
0.740956116,Double
Item (PrimArray Double)
0.6715534485,-Double
0.9971513787,-Double
0.07542630764,Double
Item (PrimArray Double)
0.6905710663,-Double
0.7232645452
,-Double
0.290713703,-Double
0.9568100872,Double
Item (PrimArray Double)
0.5912777791,-Double
0.8064679708,-Double
0.9454592212,-Double
0.325740481,Double
Item (PrimArray Double)
0.6664455681,Double
Item (PrimArray Double)
0.74555369
,Double
Item (PrimArray Double)
0.6236134912,Double
Item (PrimArray Double)
0.7817328275,Double
Item (PrimArray Double)
0.9126993851,-Double
0.4086316587,-Double
0.8191762011,Double
Item (PrimArray Double)
0.5735419353,-Double
0.8812745759,-Double
0.4726046147
,Double
Item (PrimArray Double)
0.9953313627,Double
Item (PrimArray Double)
0.09651672651,Double
Item (PrimArray Double)
0.9855650846,-Double
0.1692969699,-Double
0.8495980887,Double
Item (PrimArray Double)
0.5274306472,Double
Item (PrimArray Double)
0.6174853946,-Double
0.7865823463
,Double
Item (PrimArray Double)
0.8508156371,Double
Item (PrimArray Double)
0.52546432,Double
Item (PrimArray Double)
0.9985032451,-Double
0.05469249926,Double
Item (PrimArray Double)
0.1971371563,-Double
0.9803759185,Double
Item (PrimArray Double)
0.6607855748,-Double
0.7505747292
,-Double
0.03097494063,Double
Item (PrimArray Double)
0.9995201614,-Double
0.6731660801,Double
Item (PrimArray Double)
0.739491331,-Double
0.7195018362,-Double
0.6944905383,Double
Item (PrimArray Double)
0.9727511689,Double
Item (PrimArray Double)
0.2318515979
,Double
Item (PrimArray Double)
0.9997059088,-Double
0.0242506907,Double
Item (PrimArray Double)
0.4421787429,-Double
0.8969269532,Double
Item (PrimArray Double)
0.9981350961,-Double
0.061043673,-Double
0.9173660799,-Double
0.3980445648
,-Double
0.8150056635,-Double
0.5794529907,-Double
0.8789331304,Double
Item (PrimArray Double)
0.4769450202,Double
Item (PrimArray Double)
0.0158605829,Double
Item (PrimArray Double)
0.999874213,-Double
0.8095464474,Double
Item (PrimArray Double)
0.5870558317
,-Double
0.9165898907,-Double
0.3998286786,-Double
0.8023542565,Double
Item (PrimArray Double)
0.5968480938,-Double
0.5176737917,Double
Item (PrimArray Double)
0.8555780767,-Double
0.8154407307,-Double
0.5788405779
,Double
Item (PrimArray Double)
0.4022010347,-Double
0.9155513791,-Double
0.9052556868,-Double
0.4248672045,Double
Item (PrimArray Double)
0.7317445619,Double
Item (PrimArray Double)
0.6815789728,-Double
0.5647632201,-Double
0.8252529947
,-Double
0.8403276335,-Double
0.5420788397,-Double
0.9314281527,Double
Item (PrimArray Double)
0.363925262,Double
Item (PrimArray Double)
0.5238198472,Double
Item (PrimArray Double)
0.8518290719,Double
Item (PrimArray Double)
0.7432803869,-Double
0.6689800195
,-Double
0.985371561,-Double
0.1704197369,Double
Item (PrimArray Double)
0.4601468731,Double
Item (PrimArray Double)
0.88784281,Double
Item (PrimArray Double)
0.825855404,Double
Item (PrimArray Double)
0.5638819483,Double
Item (PrimArray Double)
0.6182366099,Double
Item (PrimArray Double)
0.7859920446
,Double
Item (PrimArray Double)
0.8331502863,-Double
0.553046653,Double
Item (PrimArray Double)
0.1500307506,Double
Item (PrimArray Double)
0.9886813308,-Double
0.662330369,-Double
0.7492119075,-Double
0.668598664,Double
Item (PrimArray Double)
0.743623444
,Double
Item (PrimArray Double)
0.7025606278,Double
Item (PrimArray Double)
0.7116238924,-Double
0.5419389763,-Double
0.8404178401,-Double
0.3388616456,Double
Item (PrimArray Double)
0.9408362159,Double
Item (PrimArray Double)
0.8331530315,Double
Item (PrimArray Double)
0.5530425174
,-Double
0.2989720662,-Double
0.9542618632,Double
Item (PrimArray Double)
0.2638522993,Double
Item (PrimArray Double)
0.9645630949,Double
Item (PrimArray Double)
0.124108739,-Double
0.9922686234,-Double
0.7282649308,-Double
0.6852956957
,Double
Item (PrimArray Double)
0.6962500149,Double
Item (PrimArray Double)
0.7177993569,-Double
0.9183535368,Double
Item (PrimArray Double)
0.3957610156,-Double
0.6326102274,-Double
0.7744703352,-Double
0.9331891859,-Double
0.359385508
,-Double
0.1153779357,-Double
0.9933216659,Double
Item (PrimArray Double)
0.9514974788,-Double
0.3076565421,-Double
0.08987977445,-Double
0.9959526224,Double
Item (PrimArray Double)
0.6678496916,Double
Item (PrimArray Double)
0.7442961705
,Double
Item (PrimArray Double)
0.7952400393,-Double
0.6062947138,-Double
0.6462007402,-Double
0.7631674805,-Double
0.2733598753,Double
Item (PrimArray Double)
0.9619118351,Double
Item (PrimArray Double)
0.9669590226,-Double
0.254931851
,-Double
0.9792894595,Double
Item (PrimArray Double)
0.2024651934,-Double
0.5369502995,-Double
0.8436138784,-Double
0.270036471,-Double
0.9628500944,-Double
0.6400277131,Double
Item (PrimArray Double)
0.7683518247
,-Double
0.7854537493,-Double
0.6189203566,Double
Item (PrimArray Double)
0.06005905383,-Double
0.9981948257,-Double
0.02455770378,Double
Item (PrimArray Double)
0.9996984141,-Double
0.65983623,Double
Item (PrimArray Double)
0.751409442
,-Double
0.6253894466,-Double
0.7803127835,-Double
0.6210408851,-Double
0.7837781695,Double
Item (PrimArray Double)
0.8348888491,Double
Item (PrimArray Double)
0.5504185768,-Double
0.1592275245,Double
Item (PrimArray Double)
0.9872419133
,Double
Item (PrimArray Double)
0.8367622488,Double
Item (PrimArray Double)
0.5475663786,-Double
0.8675753916,-Double
0.4973056806,-Double
0.2022662628,-Double
0.9793305667,Double
Item (PrimArray Double)
0.9399189937,Double
Item (PrimArray Double)
0.3413975472
,Double
Item (PrimArray Double)
0.9877404807,-Double
0.1561049093,-Double
0.9034455656,Double
Item (PrimArray Double)
0.4287028224,Double
Item (PrimArray Double)
0.1269804218,-Double
0.9919052235,-Double
0.3819600854,Double
Item (PrimArray Double)
0.924178821
,Double
Item (PrimArray Double)
0.9754625894,Double
Item (PrimArray Double)
0.2201652486,-Double
0.3204015856,-Double
0.9472818081,-Double
0.9874760884,Double
Item (PrimArray Double)
0.1577687387,Double
Item (PrimArray Double)
0.02535348474,-Double
0.9996785487
,Double
Item (PrimArray Double)
0.4835130794,-Double
0.8753371362,-Double
0.2850799925,-Double
0.9585037287,-Double
0.06805516006,-Double
0.99768156,-Double
0.7885244045,-Double
0.6150034663
,Double
Item (PrimArray Double)
0.3185392127,-Double
0.9479096845,Double
Item (PrimArray Double)
0.8880043089,Double
Item (PrimArray Double)
0.4598351306,Double
Item (PrimArray Double)
0.6476921488,-Double
0.7619021462,Double
Item (PrimArray Double)
0.9820241299,Double
Item (PrimArray Double)
0.1887554194
,Double
Item (PrimArray Double)
0.9357275128,-Double
0.3527237187,-Double
0.8894895414,Double
Item (PrimArray Double)
0.4569555293,Double
Item (PrimArray Double)
0.7922791302,Double
Item (PrimArray Double)
0.6101588153,Double
Item (PrimArray Double)
0.7483818261,Double
Item (PrimArray Double)
0.6632681526
,-Double
0.7288929755,-Double
0.6846276581,Double
Item (PrimArray Double)
0.8729032783,-Double
0.4878932944,Double
Item (PrimArray Double)
0.8288345784,Double
Item (PrimArray Double)
0.5594937369,Double
Item (PrimArray Double)
0.08074567077,Double
Item (PrimArray Double)
0.9967347374
,Double
Item (PrimArray Double)
0.9799148216,-Double
0.1994165048,-Double
0.580730673,-Double
0.8140957471,-Double
0.4700049791,-Double
0.8826637636,Double
Item (PrimArray Double)
0.2409492979,Double
Item (PrimArray Double)
0.9705377045
,Double
Item (PrimArray Double)
0.9437816757,-Double
0.3305694308,-Double
0.8927998638,-Double
0.4504535528,-Double
0.8069622304,Double
Item (PrimArray Double)
0.5906030467,Double
Item (PrimArray Double)
0.06258973166,Double
Item (PrimArray Double)
0.9980393407
,-Double
0.9312597469,Double
Item (PrimArray Double)
0.3643559849,Double
Item (PrimArray Double)
0.5777449785,Double
Item (PrimArray Double)
0.8162173362,-Double
0.3360095855,-Double
0.941858566,Double
Item (PrimArray Double)
0.697932075,-Double
0.7161639607
,-Double
0.002008157227,-Double
0.9999979837,-Double
0.1827294312,-Double
0.9831632392,-Double
0.6523911722,Double
Item (PrimArray Double)
0.7578824173,-Double
0.4302626911,-Double
0.9027037258
,-Double
0.9985126289,-Double
0.05452091251,-Double
0.01028102172,-Double
0.9999471489,-Double
0.4946071129,Double
Item (PrimArray Double)
0.8691166802,-Double
0.2999350194,Double
Item (PrimArray Double)
0.9539596344
,Double
Item (PrimArray Double)
0.8165471961,Double
Item (PrimArray Double)
0.5772786819,Double
Item (PrimArray Double)
0.2697460475,Double
Item (PrimArray Double)
0.962931498,-Double
0.7306287391,-Double
0.6827749597,-Double
0.7590952064,-Double
0.6509796216
,-Double
0.907053853,Double
Item (PrimArray Double)
0.4210146171,-Double
0.5104861064,-Double
0.8598860013,Double
Item (PrimArray Double)
0.8613350597,Double
Item (PrimArray Double)
0.5080373165,Double
Item (PrimArray Double)
0.5007881595,-Double
0.8655698812
,-Double
0.654158152,Double
Item (PrimArray Double)
0.7563577938,-Double
0.8382755311,-Double
0.545246856,Double
Item (PrimArray Double)
0.6940070834,Double
Item (PrimArray Double)
0.7199681717,Double
Item (PrimArray Double)
0.06950936031,Double
Item (PrimArray Double)
0.9975812994
,Double
Item (PrimArray Double)
0.1702942185,-Double
0.9853932612,Double
Item (PrimArray Double)
0.2695973274,Double
Item (PrimArray Double)
0.9629731466,Double
Item (PrimArray Double)
0.5519612192,-Double
0.8338697815,Double
Item (PrimArray Double)
0.225657487,-Double
0.9742067022
,Double
Item (PrimArray Double)
0.4215262855,-Double
0.9068161835,Double
Item (PrimArray Double)
0.4881873305,-Double
0.8727388672,-Double
0.3683854996,-Double
0.9296731273,-Double
0.9825390578,Double
Item (PrimArray Double)
0.1860564427
,Double
Item (PrimArray Double)
0.81256471,Double
Item (PrimArray Double)
0.5828709909,Double
Item (PrimArray Double)
0.3196460933,-Double
0.9475370046,Double
Item (PrimArray Double)
0.9570913859,Double
Item (PrimArray Double)
0.2897862643,-Double
0.6876655497,-Double
0.7260276109
,-Double
0.9988770922,-Double
0.047376731,-Double
0.1250179027,Double
Item (PrimArray Double)
0.992154486,-Double
0.8280133617,Double
Item (PrimArray Double)
0.560708367,Double
Item (PrimArray Double)
0.9324863769,-Double
0.3612051451
,Double
Item (PrimArray Double)
0.6394653183,Double
Item (PrimArray Double)
0.7688199442,-Double
0.01623847064,-Double
0.9998681473,-Double
0.9955014666,-Double
0.09474613458,-Double
0.81453315,Double
Item (PrimArray Double)
0.580117012
,Double
Item (PrimArray Double)
0.4037327978,-Double
0.9148769469,Double
Item (PrimArray Double)
0.9944263371,Double
Item (PrimArray Double)
0.1054336766,-Double
0.1624711654,Double
Item (PrimArray Double)
0.9867132919,-Double
0.9949487814,-Double
0.100383875
,-Double
0.6995302564,Double
Item (PrimArray Double)
0.7146029809,Double
Item (PrimArray Double)
0.5263414922,-Double
0.85027327,-Double
0.5395221479,Double
Item (PrimArray Double)
0.841971408,Double
Item (PrimArray Double)
0.6579370318,Double
Item (PrimArray Double)
0.7530729462
,Double
Item (PrimArray Double)
0.01426758847,-Double
0.9998982128,-Double
0.6734383991,Double
Item (PrimArray Double)
0.7392433447,Double
Item (PrimArray Double)
0.639412098,-Double
0.7688642071,Double
Item (PrimArray Double)
0.9211571421,Double
Item (PrimArray Double)
0.3891908523
,-Double
0.146637214,-Double
0.9891903394,-Double
0.782318098,Double
Item (PrimArray Double)
0.6228791163,-Double
0.5039610839,-Double
0.8637263605,-Double
0.7743120191,-Double
0.6328039957
]