gloss-1.0.0.0: Graphics/Gloss/Geometry/Line.hs
-- | Geometric functions concerning lines.
module Graphics.Gloss.Geometry.Line
( closestPointOnLine
, closestPointOnLine_param )
where
import Graphics.Gloss.Picture (Point)
import Graphics.Gloss.Geometry.Vector
-- | Given an infinite line which intersects `P1` and `P1`,
-- return the point on that line that is closest to `P3`
closestPointOnLine
:: Point -- ^ `P1`
-> Point -- ^ `P2`
-> Point -- ^ `P3`
-> Point -- ^ the point on the line P1-P2 that is closest to `P3`
{-# INLINE closestPointOnLine #-}
closestPointOnLine p1 p2 p3
= p1 + (u `mulSV` (p2 - p1))
where u = closestPointOnLine_param p1 p2 p3
-- | Given an infinite line which intersects P1 and P2,
-- let P4 be the point on the line that is closest to P3.
--
-- Return an indication of where on the line P4 is relative to P1 and P2.
--
-- @
-- if P4 == P1 return 0
-- if P4 == P2 return 1
-- if P4 is halfway between P1 and P2 then return 0.5
-- @
{-# INLINE closestPointOnLine_param #-}
closestPointOnLine_param
:: Point -- ^ `P1`
-> Point -- ^ `P2`
-> Point -- ^ `P3`
-> Float
closestPointOnLine_param p1 p2 p3
= (p3 - p1) `dotV` (p2 - p1)
/ (p2 - p1) `dotV` (p2 - p1)