packages feed

hcg-minus-0.11: Data/CG/Minus/Arrow.hs

-- | Arrows
module Data.CG.Minus.Arrow where

import Data.CG.Minus

-- | Given the arrow body 'Ln' and the arrow length and arrow angle
-- (in radians) 'R' calculate the 'Pt' of each arrow tip.
--
-- > arrow_coord (ln' (0,0) (1,1)) 0.1 (pi/9)
arrow_coord :: Ln R -> R -> R -> (Pt R,Pt R)
arrow_coord l n a =
    let ((x0,y0),(x1,y1)) = ln_pt' l
        a' = atan2 (y1 - y0) (x1 - x0) + pi
        x2 = x1 + n * cos (a' - a)
        y2 = y1 + n * sin (a' - a)
        x3 = x1 + n * cos (a' + a)
        y3 = y1 + n * sin (a' + a)
    in (pt x2 y2,pt x3 y3)