hgeometry-0.5.0.0: src/Data/Geometry/Line.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Geometry.Line( module Data.Geometry.Line.Internal
) where
import Data.Geometry.Line.Internal
import Data.Geometry.LineSegment
import Data.Geometry.Box
import Data.Geometry.Properties
import Data.Geometry.Point
import Data.Geometry.Boundary
import Data.Geometry.Transformation
import Data.Geometry.Vector
-- | Lines are transformable, via line segments
instance (Num r, AlwaysTruePFT d) => IsTransformable (Line d r) where
transformBy t = supportingLine . transformPointFunctor t . toLineSegment'
where
toLineSegment' :: (Num r, Arity d) => Line d r -> LineSegment d () r
toLineSegment' = toLineSegment
type instance IntersectionOf (Line 2 r) (Boundary (Rectangle p r)) =
[ NoIntersection, Point 2 r, (Point 2 r, Point 2 r) , LineSegment 2 () r]
-- instance (Eq r, Fractional r)
-- => (Line 2 r) `IsIntersectableWith` (Boundary (Rectangle p r)) where
-- nonEmptyIntersection = defaultNonEmptyIntersection
-- _ `intersect` (Boundary Empty) = coRec NoIntersection
-- line `intersect` (Boundary rect) = error "TODO"
-- where
-- (t,r,b,l) = sides' rect
-- ints = map (line `intersect`) [t,r,b,l]
type instance IntersectionOf (Line 2 r) (Rectangle p r) =
[ NoIntersection, Point 2 r, LineSegment 2 () r]