{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -Wno-pattern-namespace-specifier #-}
module Chart.Data
(
Rect (..),
pattern Rect,
mid,
foldRect,
addPoint,
projectOnP,
projectOnR,
space1,
padRect,
padSingletons,
isSingleton,
Point (..),
addp,
Range (..),
Multiplicative (one),
Additive (zero),
abs,
Direction (..),
Basis (..),
)
where
import NumHask.Prelude
import NumHask.Space hiding (Chart)
import Prelude qualified as P
padRect :: (Subtractive a) => a -> Rect a -> Rect a
padRect :: forall a. Subtractive a => a -> Rect a -> Rect a
padRect a
p (Rect a
x a
z a
y a
w) = a -> a -> a -> a -> Rect a
forall a. a -> a -> a -> a -> Rect a
Rect (a
x a -> a -> a
forall a. Subtractive a => a -> a -> a
- a
p) (a
z a -> a -> a
forall a. Additive a => a -> a -> a
+ a
p) (a
y a -> a -> a
forall a. Subtractive a => a -> a -> a
- a
p) (a
w a -> a -> a
forall a. Additive a => a -> a -> a
+ a
p)
padSingletons :: Rect Double -> Rect Double
padSingletons :: Rect Double -> Rect Double
padSingletons (Rect Double
x Double
z Double
y Double
w)
| Double
x Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
z Bool -> Bool -> Bool
&& Double
y Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
w = Double -> Double -> Double -> Double -> Rect Double
forall a. a -> a -> a -> a -> Rect a
Rect (Double
x Double -> Double -> Double
forall a. Subtractive a => a -> a -> a
- Double
0.5) (Double
x Double -> Double -> Double
forall a. Additive a => a -> a -> a
+ Double
0.5) (Double
y Double -> Double -> Double
forall a. Subtractive a => a -> a -> a
- Double
0.5) (Double
y Double -> Double -> Double
forall a. Additive a => a -> a -> a
+ Double
0.5)
| Double
x Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
z = Double -> Double -> Double -> Double -> Rect Double
forall a. a -> a -> a -> a -> Rect a
Rect (Double
x Double -> Double -> Double
forall a. Subtractive a => a -> a -> a
- Double
0.5) (Double
x Double -> Double -> Double
forall a. Additive a => a -> a -> a
+ Double
0.5) Double
y Double
w
| Double
y Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
w = Double -> Double -> Double -> Double -> Rect Double
forall a. a -> a -> a -> a -> Rect a
Rect Double
x Double
z (Double
y Double -> Double -> Double
forall a. Subtractive a => a -> a -> a
- Double
0.5) (Double
y Double -> Double -> Double
forall a. Additive a => a -> a -> a
+ Double
0.5)
| Bool
otherwise = Double -> Double -> Double -> Double -> Rect Double
forall a. a -> a -> a -> a -> Rect a
Rect Double
x Double
z Double
y Double
w
isSingleton :: Rect Double -> Bool
isSingleton :: Rect Double -> Bool
isSingleton (Rect Double
x Double
z Double
y Double
w) = Double
x Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
z Bool -> Bool -> Bool
|| Double
y Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
w
addp :: Point Double -> Point Double -> Point Double
addp :: Point Double -> Point Double -> Point Double
addp = Point Double -> Point Double -> Point Double
forall a. Additive a => a -> a -> a
(+)
instance P.Num (Point Double) where
+ :: Point Double -> Point Double -> Point Double
(+) = Point Double -> Point Double -> Point Double
forall a. Additive a => a -> a -> a
(+)
(-) = (-)
* :: Point Double -> Point Double -> Point Double
(*) = Point Double -> Point Double -> Point Double
forall a. Multiplicative a => a -> a -> a
(*)
negate :: Point Double -> Point Double
negate = Point Double -> Point Double
forall a. Subtractive a => a -> a
negate
abs :: Point Double -> Point Double
abs = [Char] -> Point Double -> Point Double
forall a. HasCallStack => [Char] -> a
error [Char]
"abs: not defined for Point"
signum :: Point Double -> Point Double
signum = [Char] -> Point Double -> Point Double
forall a. HasCallStack => [Char] -> a
error [Char]
"signum: not defined for Point"
fromInteger :: Integer -> Point Double
fromInteger Integer
i = Double -> Double -> Point Double
forall a. a -> a -> Point a
Point (Integer -> Double
forall a. Num a => Integer -> a
P.fromInteger Integer
i) (Integer -> Double
forall a. Num a => Integer -> a
P.fromInteger Integer
i)