packages feed

hgeometry-0.12.0.0: src/Algorithms/Geometry/LineSegmentIntersection.hs

--------------------------------------------------------------------------------
-- |
-- Module      :  Algorithms.Geometry.LineSegmentIntersection
-- Copyright   :  (C) Frank Staals
-- License     :  see the LICENSE file
-- Maintainer  :  Frank Staals
--------------------------------------------------------------------------------
module Algorithms.Geometry.LineSegmentIntersection
  ( hasInteriorIntersections
  , hasSelfIntersections
  , Intersections
  , Associated(..)
  , IntersectionPoint(..)
  , isEndPointIntersection
  , associated
  , Compare
  ) where

import qualified Algorithms.Geometry.LineSegmentIntersection.BentleyOttmann as BO
import           Algorithms.Geometry.LineSegmentIntersection.Types
import           Data.Geometry.LineSegment
import           Data.Geometry.Polygon

-- Tests if there are any interior intersections.
--
-- | \(O(n \log n)\)
hasInteriorIntersections :: (Ord r, Fractional r)
                         => [LineSegment 2 p r] -> Bool
hasInteriorIntersections = not . null . BO.interiorIntersections

-- | \(O(n \log n)\)
hasSelfIntersections :: (Ord r, Fractional r) => Polygon t p r -> Bool
hasSelfIntersections = hasInteriorIntersections . listEdges