27 lines
567 B
Haskell
27 lines
567 B
Haskell
{-# OPTIONS_HADDOCK ignore-exports #-}
|
|
|
|
module Algebra.Polygon where
|
|
|
|
import Algebra.Vector
|
|
import MyPrelude
|
|
{- import Diagrams.Coordinates -}
|
|
|
|
|
|
splitPoly :: [PT]
|
|
-> Segment
|
|
-> [[PT]]
|
|
splitPoly pts (a, b)
|
|
| elem a pts && elem b pts =
|
|
[b : takeWhile (/= b) shiftedPoly, a : dropWhile (/= b) shiftedPoly]
|
|
| otherwise = [[]]
|
|
where
|
|
shiftedPoly = shiftM' a pts
|
|
|
|
|
|
polySegments :: [PT] -> [Segment]
|
|
polySegments p@(x':_:_:_) = go p ++ [(last p, x')]
|
|
where
|
|
go (x:y:xs) = (x, y) : go (y:xs)
|
|
go _ = []
|
|
polySegments _ = []
|