packages feed

juicy-gcode-0.2.1.0: src/Graphics/Curve.hs

module Graphics.Curve ( 
    Curve(..),
    isClockwise4,
    isClockwise3
) where

import Linear
import Control.Lens

class Curve c where
  pointAt :: c -> Double -> V2 Double

isClockwise4 :: V2 Double -> V2 Double -> V2 Double -> V2 Double -> Bool
isClockwise4 p1 p2 p3 p4 = s < 0
    where
        s = (p2 ^. _x - p1 ^. _x) * (p2 ^. _y + p1 ^. _y)
          + (p3 ^. _x - p2 ^. _x) * (p3 ^. _y + p2 ^. _y)
          + (p4 ^. _x - p3 ^. _x) * (p4 ^. _y + p3 ^. _y)
          + (p1 ^. _x - p4 ^. _x) * (p1 ^. _y + p4 ^. _y)

isClockwise3 :: V2 Double -> V2 Double -> V2 Double -> Bool
isClockwise3 p1 p2 p3 = s < 0
    where
        s = (p3 ^. _x - p1 ^. _x) * (p3 ^. _y + p1 ^. _y)
          + (p2 ^. _x - p3 ^. _x) * (p2 ^. _y + p3 ^. _y)
          + (p1 ^. _x - p2 ^. _x) * (p1 ^. _y + p2 ^. _y)