26 lines
690 B
Haskell
26 lines
690 B
Haskell
module Picture.Composite where
|
|
import Picture.Data
|
|
import Picture.Base
|
|
import Geometry
|
|
|
|
import Data.Foldable
|
|
|
|
arrowPath :: [Point2] -> Picture
|
|
arrowPath xs = mconcat $ zipWith arrow xs $ tail xs
|
|
|
|
multiArrow :: Foldable t => Point2 -> Point2 -> Color -> t Color -> Picture
|
|
multiArrow sp ep col' cols
|
|
| null cols = color col' (arrow sp ep)
|
|
| otherwise = foldl' f mempty cols
|
|
where
|
|
f pic col = uncurryV translate offset pic <> color col (arrow sp ep)
|
|
offset = normalizeV (vNormal (ep -.- sp))
|
|
|
|
arrow :: Point2 -> Point2 -> Picture
|
|
arrow a b = line [a,b]
|
|
<> line [b +.+ n -.- v,b]
|
|
<> line [b -.- n -.- v,b]
|
|
where
|
|
v = 5 *.* normalizeV (b -.- a)
|
|
n = vNormal v
|