41 lines
999 B
Haskell
41 lines
999 B
Haskell
module Geometry.LHS
|
|
( isLHS
|
|
, isRHS
|
|
) where
|
|
import Geometry.Data
|
|
-- | Test whether a point is stricly on the LHS of a line.
|
|
-- Returns False if the line is of zero length.
|
|
isLHS
|
|
:: Point2 -- ^ First line point.
|
|
-> Point2 -- ^ Second line point.
|
|
-> Point2 -- ^ Point not on line.
|
|
-> Bool
|
|
{-# INLINE isLHS #-}
|
|
isLHS (V2 x y) (V2 x' y') (V2 x'' y'')
|
|
| (x,y) == (x',y') = False
|
|
| otherwise = a1 * b2 - a2 * b1 > 0
|
|
where
|
|
a1 = x' - x
|
|
a2 = y' - y
|
|
b1 = x'' - x
|
|
b2 = y'' - y
|
|
-- | Test whether a point is on the RHS of a line.
|
|
-- Returns False if the line is of zero length.
|
|
isRHS
|
|
:: Point2 -- ^ First line point.
|
|
-> Point2 -- ^ Second line point.
|
|
-> Point2 -- ^ Point not on line.
|
|
-> Bool
|
|
{-# INLINE isRHS #-}
|
|
isRHS
|
|
(V2 x y)
|
|
(V2 x' y')
|
|
(V2 x'' y'')
|
|
| (x,y) == (x',y') = False
|
|
| otherwise = a1 * b2 - a2 * b1 < 0
|
|
where
|
|
a1 = x' - x
|
|
a2 = y' - y
|
|
b1 = x'' - x
|
|
b2 = y'' - y
|