module Data.Geometry.Point.Orientation where
import Algorithms.Geometry.SoS.Orientation
import Algorithms.Geometry.SoS.Sign
import Data.Ext
import Data.Geometry.Point.Internal
import Data.Geometry.Vector
newtype StrictCCW = SCCW Sign deriving Eq
pattern CCW :: StrictCCW
pattern CCW = SCCW Negative
pattern CW :: StrictCCW
pattern CW = SCCW Positive
{-# COMPLETE CCW, CW #-}
instance Show StrictCCW where
show = \case
CCW -> "CCW"
CW -> "CW"
ccw :: (Ord r, Num r, Ord i)
=> Point 2 r :+ i -> Point 2 r :+ i -> Point 2 r :+ i -> StrictCCW
ccw p q r = SCCW $ sideTest r (Vector2 p q)