hgeometry-0.7.0.0: Geometric Algorithms, Data structures, and Data types.

Data.Geometry.LineSegment

Description

Synopsis

# Documentation

data LineSegment d p r Source #

Line segments. LineSegments have a start and end point, both of which may contain additional data of type p. We can think of a Line-Segment being defined as

>>> data LineSegment d p r = LineSegment (EndPoint (Point d r :+ p)) (EndPoint (Point d r :+ p))

Instances
 Arity d => Bifunctor (LineSegment d) Source # Instance detailsDefined in Data.Geometry.LineSegment Methodsbimap :: (a -> b) -> (c -> d0) -> LineSegment d a c -> LineSegment d b d0 #first :: (a -> b) -> LineSegment d a c -> LineSegment d b c #second :: (b -> c) -> LineSegment d a b -> LineSegment d a c # Arity d => Functor (LineSegment d p) Source # Instance detailsDefined in Data.Geometry.LineSegment Methodsfmap :: (a -> b) -> LineSegment d p a -> LineSegment d p b #(<$) :: a -> LineSegment d p b -> LineSegment d p a # Source # Instance detailsDefined in Data.Geometry.LineSegment Methodspmap :: (Point (Dimension (LineSegment d p r)) r -> Point (Dimension (LineSegment d p s)) s) -> LineSegment d p r -> LineSegment d p s Source # (Eq r, Eq p, Arity d) => Eq (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment Methods(==) :: LineSegment d p r -> LineSegment d p r -> Bool #(/=) :: LineSegment d p r -> LineSegment d p r -> Bool # (Show r, Show p, Arity d) => Show (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment MethodsshowsPrec :: Int -> LineSegment d p r -> ShowS #show :: LineSegment d p r -> String #showList :: [LineSegment d p r] -> ShowS # (Arbitrary r, Arbitrary p, Arity d) => Arbitrary (LineSegment d p r) # Instance detailsDefined in Test.QuickCheck.HGeometryInstances Methodsarbitrary :: Gen (LineSegment d p r) #shrink :: LineSegment d p r -> [LineSegment d p r] # (Fractional r, Arity d, Arity (d + 1)) => IsTransformable (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment MethodstransformBy :: Transformation (Dimension (LineSegment d p r)) (NumType (LineSegment d p r)) -> LineSegment d p r -> LineSegment d p r Source # (Num r, Arity d) => HasSupportingLine (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment MethodssupportingLine :: LineSegment d p r -> Line (Dimension (LineSegment d p r)) (NumType (LineSegment d p r)) Source # HasEnd (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment Associated Typestype EndCore (LineSegment d p r) :: * Source #type EndExtra (LineSegment d p r) :: * Source # Methodsend :: Lens' (LineSegment d p r) (EndCore (LineSegment d p r) :+ EndExtra (LineSegment d p r)) Source # HasStart (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment Associated Typestype StartCore (LineSegment d p r) :: * Source #type StartExtra (LineSegment d p r) :: * Source # Methodsstart :: Lens' (LineSegment d p r) (StartCore (LineSegment d p r) :+ StartExtra (LineSegment d p r)) Source # Arity d => IsBoxable (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment MethodsboundingBox :: LineSegment d p r -> Box (Dimension (LineSegment d p r)) () (NumType (LineSegment d p r)) Source # IpeWriteText r => IpeWrite (LineSegment 2 p r) Source # Instance detailsDefined in Data.Geometry.Ipe.Writer MethodsipeWrite :: LineSegment 2 p r -> Maybe (Node Text Text) Source # HasDefaultFromIpe (LineSegment 2 () r) Source # Instance detailsDefined in Data.Geometry.Ipe.FromIpe Associated Typestype DefaultFromIpe (LineSegment 2 () r) :: * -> * Source # MethodsdefaultFromIpe :: r0 ~ NumType (LineSegment 2 () r) => Prism' (IpeObject r0) (LineSegment 2 () r :+ IpeAttributes (DefaultFromIpe (LineSegment 2 () r)) r0) Source # HasDefaultIpeOut (LineSegment 2 p r) Source # Instance detailsDefined in Data.Geometry.Ipe.IpeOut Associated Typestype DefaultIpeOut (LineSegment 2 p r) :: * -> * Source # MethodsdefaultIpeOut :: IpeOut (LineSegment 2 p r) (IpeObject' (DefaultIpeOut (LineSegment 2 p r)) (NumType (LineSegment 2 p r))) Source # (Ord r, Fractional r) => IsIntersectableWith (LineSegment 2 p r) (Line 2 r) Source # Instance detailsDefined in Data.Geometry.LineSegment Methodsintersect :: LineSegment 2 p r -> Line 2 r -> Intersection (LineSegment 2 p r) (Line 2 r) Source #intersects :: LineSegment 2 p r -> Line 2 r -> Bool Source #nonEmptyIntersection :: proxy (LineSegment 2 p r) -> proxy (Line 2 r) -> Intersection (LineSegment 2 p r) (Line 2 r) -> Bool Source # (Ord r, Floating r) => IsIntersectableWith (LineSegment 2 p r) (Circle q r) Source # Instance detailsDefined in Data.Geometry.Ball Methodsintersect :: LineSegment 2 p r -> Circle q r -> Intersection (LineSegment 2 p r) (Circle q r) Source #intersects :: LineSegment 2 p r -> Circle q r -> Bool Source #nonEmptyIntersection :: proxy (LineSegment 2 p r) -> proxy (Circle q r) -> Intersection (LineSegment 2 p r) (Circle q r) -> Bool Source # (Ord r, Fractional r) => IsIntersectableWith (LineSegment 2 p r) (LineSegment 2 p r) Source # Instance detailsDefined in Data.Geometry.LineSegment Methodsintersect :: LineSegment 2 p r -> LineSegment 2 p r -> Intersection (LineSegment 2 p r) (LineSegment 2 p r) Source #intersects :: LineSegment 2 p r -> LineSegment 2 p r -> Bool Source #nonEmptyIntersection :: proxy (LineSegment 2 p r) -> proxy (LineSegment 2 p r) -> Intersection (LineSegment 2 p r) (LineSegment 2 p r) -> Bool Source # (Fractional r, Ord r, HasBoundingLines o) => IsIntersectableWith (LineSegment 2 a r) (Slab o a r) Source # Instance detailsDefined in Data.Geometry.Slab Methodsintersect :: LineSegment 2 a r -> Slab o a r -> Intersection (LineSegment 2 a r) (Slab o a r) Source #intersects :: LineSegment 2 a r -> Slab o a r -> Bool Source #nonEmptyIntersection :: proxy (LineSegment 2 a r) -> proxy (Slab o a r) -> Intersection (LineSegment 2 a r) (Slab o a r) -> Bool Source # type IntersectionOf (HalfLine 2 r) (LineSegment 2 p r) Source # Instance detailsDefined in Data.Geometry.HalfLine type IntersectionOf (HalfLine 2 r) (LineSegment 2 p r) = NoIntersection ': (Point 2 r ': (LineSegment 2 () r ': ([] :: [*]))) type NumType (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment type NumType (LineSegment d p r) = r type Dimension (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment type Dimension (LineSegment d p r) = d type EndCore (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment type EndCore (LineSegment d p r) = Point d r type EndExtra (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment type EndExtra (LineSegment d p r) = p type StartCore (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment type StartCore (LineSegment d p r) = Point d r type StartExtra (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment type StartExtra (LineSegment d p r) = p type DefaultFromIpe (LineSegment 2 () r) Source # Instance detailsDefined in Data.Geometry.Ipe.FromIpe type DefaultFromIpe (LineSegment 2 () r) = Path type DefaultIpeOut (LineSegment 2 p r) Source # Instance detailsDefined in Data.Geometry.Ipe.IpeOut type DefaultIpeOut (LineSegment 2 p r) = Path type IntersectionOf (LineSegment 2 p r) (Line 2 r) Source # Instance detailsDefined in Data.Geometry.LineSegment type IntersectionOf (LineSegment 2 p r) (Line 2 r) = NoIntersection ': (Point 2 r ': (LineSegment 2 p r ': ([] :: [*]))) type IntersectionOf (LineSegment 2 p r) (Circle q r) Source # Instance detailsDefined in Data.Geometry.Ball type IntersectionOf (LineSegment 2 p r) (Circle q r) = NoIntersection ': (Touching (Point 2 r) ': (Point 2 r ': ((Point 2 r, Point 2 r) ': ([] :: [*])))) type IntersectionOf (LineSegment 2 p r) (LineSegment 2 p r) Source # Instance detailsDefined in Data.Geometry.LineSegment type IntersectionOf (LineSegment 2 p r) (LineSegment 2 p r) = NoIntersection ': (Point 2 r ': (LineSegment 2 p r ': ([] :: [*]))) type IntersectionOf (LineSegment 2 p r) (Slab o a r) Source # Instance detailsDefined in Data.Geometry.Slab type IntersectionOf (LineSegment 2 p r) (Slab o a r) = NoIntersection ': (LineSegment 2 () r ': ([] :: [*])) pattern LineSegment :: EndPoint (Point d r :+ p) -> EndPoint (Point d r :+ p) -> LineSegment d p r Source # Pattern that essentially models the line segment as a: >>> data LineSegment d p r = LineSegment (EndPoint (Point d r :+ p)) (EndPoint (Point d r :+ p))  pattern LineSegment' :: (Point d r :+ p) -> (Point d r :+ p) -> LineSegment d p r Source # Gets the start and end point, but forgetting if they are open or closed. pattern ClosedLineSegment :: (Point d r :+ p) -> (Point d r :+ p) -> LineSegment d p r Source # _SubLine :: (Fractional r, Eq r, Arity d) => Iso' (LineSegment d p r) (SubLine d p r) Source # data Range a Source # Data type for representing ranges. Constructors  Range Fields_lower :: !(EndPoint a) _upper :: !(EndPoint a) Instances  Source # Instance detailsDefined in Data.Range Methodsfmap :: (a -> b) -> Range a -> Range b #(<$) :: a -> Range b -> Range a # Source # Instance detailsDefined in Data.Range Methodsfold :: Monoid m => Range m -> m #foldMap :: Monoid m => (a -> m) -> Range a -> m #foldr :: (a -> b -> b) -> b -> Range a -> b #foldr' :: (a -> b -> b) -> b -> Range a -> b #foldl :: (b -> a -> b) -> b -> Range a -> b #foldl' :: (b -> a -> b) -> b -> Range a -> b #foldr1 :: (a -> a -> a) -> Range a -> a #foldl1 :: (a -> a -> a) -> Range a -> a #toList :: Range a -> [a] #null :: Range a -> Bool #length :: Range a -> Int #elem :: Eq a => a -> Range a -> Bool #maximum :: Ord a => Range a -> a #minimum :: Ord a => Range a -> a #sum :: Num a => Range a -> a #product :: Num a => Range a -> a # Source # Instance detailsDefined in Data.Range Methodstraverse :: Applicative f => (a -> f b) -> Range a -> f (Range b) #sequenceA :: Applicative f => Range (f a) -> f (Range a) #mapM :: Monad m => (a -> m b) -> Range a -> m (Range b) #sequence :: Monad m => Range (m a) -> m (Range a) # Eq a => Eq (Range a) Source # Instance detailsDefined in Data.Range Methods(==) :: Range a -> Range a -> Bool #(/=) :: Range a -> Range a -> Bool # Show a => Show (Range a) Source # Instance detailsDefined in Data.Range MethodsshowsPrec :: Int -> Range a -> ShowS #show :: Range a -> String #showList :: [Range a] -> ShowS # Generic (Range a) Source # Instance detailsDefined in Data.Range Associated Typestype Rep (Range a) :: * -> * # Methodsfrom :: Range a -> Rep (Range a) x #to :: Rep (Range a) x -> Range a # (Arbitrary r, Ord r) => Arbitrary (Range r) # Instance detailsDefined in Test.QuickCheck.HGeometryInstances Methodsarbitrary :: Gen (Range r) #shrink :: Range r -> [Range r] # NFData a => NFData (Range a) Source # Instance detailsDefined in Data.Range Methodsrnf :: Range a -> () # Source # Instance detailsDefined in Data.Geometry.IntervalTree MethodstoRange :: Range r -> Range (NumType (Range r)) Source # Ord a => IsIntersectableWith (Range a) (Range a) Source # Instance detailsDefined in Data.Range Methodsintersect :: Range a -> Range a -> Intersection (Range a) (Range a) Source #intersects :: Range a -> Range a -> Bool Source #nonEmptyIntersection :: proxy (Range a) -> proxy (Range a) -> Intersection (Range a) (Range a) -> Bool Source # type Rep (Range a) Source # Instance detailsDefined in Data.Range type Rep (Range a) = D1 (MetaData "Range" "Data.Range" "hgeometry-0.7.0.0-3y7zA7ljCTE9s6EHvXHItM" False) (C1 (MetaCons "Range" PrefixI True) (S1 (MetaSel (Just "_lower") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (EndPoint a)) :*: S1 (MetaSel (Just "_upper") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (EndPoint a)))) type NumType (Range a) Source # Instance detailsDefined in Data.Range type NumType (Range a) = a type IntersectionOf (Range a) (Range a) Source # Instance detailsDefined in Data.Range type IntersectionOf (Range a) (Range a) = NoIntersection ': (Range a ': ([] :: [*]))

data EndPoint a Source #

Endpoints of a range may either be open or closed.

Constructors

 Open !a Closed !a
Instances
 Source # Instance detailsDefined in Data.Range Methodsfmap :: (a -> b) -> EndPoint a -> EndPoint b #(<$) :: a -> EndPoint b -> EndPoint a # Source # Instance detailsDefined in Data.Range Methodsfold :: Monoid m => EndPoint m -> m #foldMap :: Monoid m => (a -> m) -> EndPoint a -> m #foldr :: (a -> b -> b) -> b -> EndPoint a -> b #foldr' :: (a -> b -> b) -> b -> EndPoint a -> b #foldl :: (b -> a -> b) -> b -> EndPoint a -> b #foldl' :: (b -> a -> b) -> b -> EndPoint a -> b #foldr1 :: (a -> a -> a) -> EndPoint a -> a #foldl1 :: (a -> a -> a) -> EndPoint a -> a #toList :: EndPoint a -> [a] #null :: EndPoint a -> Bool #length :: EndPoint a -> Int #elem :: Eq a => a -> EndPoint a -> Bool #maximum :: Ord a => EndPoint a -> a #minimum :: Ord a => EndPoint a -> a #sum :: Num a => EndPoint a -> a #product :: Num a => EndPoint a -> a # Source # Instance detailsDefined in Data.Range Methodstraverse :: Applicative f => (a -> f b) -> EndPoint a -> f (EndPoint b) #sequenceA :: Applicative f => EndPoint (f a) -> f (EndPoint a) #mapM :: Monad m => (a -> m b) -> EndPoint a -> m (EndPoint b) #sequence :: Monad m => EndPoint (m a) -> m (EndPoint a) # Eq a => Eq (EndPoint a) Source # Instance detailsDefined in Data.Range Methods(==) :: EndPoint a -> EndPoint a -> Bool #(/=) :: EndPoint a -> EndPoint a -> Bool # Ord a => Ord (EndPoint a) Source # Instance detailsDefined in Data.Range Methodscompare :: EndPoint a -> EndPoint a -> Ordering #(<) :: EndPoint a -> EndPoint a -> Bool #(<=) :: EndPoint a -> EndPoint a -> Bool #(>) :: EndPoint a -> EndPoint a -> Bool #(>=) :: EndPoint a -> EndPoint a -> Bool #max :: EndPoint a -> EndPoint a -> EndPoint a #min :: EndPoint a -> EndPoint a -> EndPoint a # Read a => Read (EndPoint a) Source # Instance detailsDefined in Data.Range MethodsreadsPrec :: Int -> ReadS (EndPoint a) # Show a => Show (EndPoint a) Source # Instance detailsDefined in Data.Range MethodsshowsPrec :: Int -> EndPoint a -> ShowS #show :: EndPoint a -> String #showList :: [EndPoint a] -> ShowS # Source # Instance detailsDefined in Data.Range Associated Typestype Rep (EndPoint a) :: * -> * # Methodsfrom :: EndPoint a -> Rep (EndPoint a) x #to :: Rep (EndPoint a) x -> EndPoint a # Arbitrary r => Arbitrary (EndPoint r) # Instance detailsDefined in Test.QuickCheck.HGeometryInstances Methodsshrink :: EndPoint r -> [EndPoint r] # NFData a => NFData (EndPoint a) Source # Instance detailsDefined in Data.Range Methodsrnf :: EndPoint a -> () # type Rep (EndPoint a) Source # Instance detailsDefined in Data.Range type Rep (EndPoint a) = D1 (MetaData "EndPoint" "Data.Range" "hgeometry-0.7.0.0-3y7zA7ljCTE9s6EHvXHItM" False) (C1 (MetaCons "Open" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a)) :+: C1 (MetaCons "Closed" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a))) pattern Range' :: a -> a -> Range a Source # A range from l to u, ignoring/forgetting the type of the endpoints pattern ClosedRange :: a -> a -> Range a Source # pattern OpenRange :: a -> a -> Range a Source # lower :: forall a. Lens' (Range a) (EndPoint a) Source # upper :: forall a. Lens' (Range a) (EndPoint a) Source # inRange :: Ord a => a -> Range a -> Bool Source # Test if a value lies in a range. >>> 1 inRange (OpenRange 0 2) True >>> 1 inRange (OpenRange 0 1) False >>> 1 inRange (ClosedRange 0 1) True >>> 1 inRange (ClosedRange 1 1) True >>> 10 inRange (OpenRange 1 10) False >>> 10 inRange (ClosedRange 0 1) False  clipLower :: Ord a => EndPoint a -> Range a -> Maybe (Range a) Source # Clip the interval from below. I.e. intersect with the interval {l,infty), where { is either open, (, orr closed, [. clipUpper :: Ord a => EndPoint a -> Range a -> Maybe (Range a) Source # Clip the interval from above. I.e. intersect with (-infty, u}, where } is either open, ), or closed, ], covers :: Ord a => Range a -> Range a -> Bool Source # Wether or not the first range completely covers the second one isValid :: Ord a => Range a -> Bool Source # Check if the range is valid and nonEmpty, i.e. if the lower endpoint is indeed smaller than the right endpoint. Note that we treat empty open-ranges as invalid as well. shiftLeft :: Num r => r -> Range r -> Range r Source # Shift a range x units to the left >>> prettyShow$ shiftLeft 10 (ClosedRange 10 20)
"[0, 10]"
>>> prettyShow $shiftLeft 10 (OpenRange 15 25) "(5, 15)"  shiftRight :: Num r => r -> Range r -> Range r Source # Shifts the range to the right >>> prettyShow$ shiftRight 10 (ClosedRange 10 20)
"[20, 30]"
>>> prettyShow $shiftRight 10 (OpenRange 15 25) "(25, 35)"  newtype Interval a r Source # An Interval is essentially a Range but with possible payload Constructors  GInterval Fields_unInterval :: Range (r :+ a) Instances  Source # Instance detailsDefined in Data.Geometry.Interval Methodsbimap :: (a -> b) -> (c -> d) -> Interval a c -> Interval b d #first :: (a -> b) -> Interval a c -> Interval b c #second :: (b -> c) -> Interval a b -> Interval a c # Source # Instance detailsDefined in Data.Geometry.Interval Methodsfmap :: (a0 -> b) -> Interval a a0 -> Interval a b #(<$) :: a0 -> Interval a b -> Interval a a0 # Source # Instance detailsDefined in Data.Geometry.Interval Methodsfold :: Monoid m => Interval a m -> m #foldMap :: Monoid m => (a0 -> m) -> Interval a a0 -> m #foldr :: (a0 -> b -> b) -> b -> Interval a a0 -> b #foldr' :: (a0 -> b -> b) -> b -> Interval a a0 -> b #foldl :: (b -> a0 -> b) -> b -> Interval a a0 -> b #foldl' :: (b -> a0 -> b) -> b -> Interval a a0 -> b #foldr1 :: (a0 -> a0 -> a0) -> Interval a a0 -> a0 #foldl1 :: (a0 -> a0 -> a0) -> Interval a a0 -> a0 #toList :: Interval a a0 -> [a0] #null :: Interval a a0 -> Bool #length :: Interval a a0 -> Int #elem :: Eq a0 => a0 -> Interval a a0 -> Bool #maximum :: Ord a0 => Interval a a0 -> a0 #minimum :: Ord a0 => Interval a a0 -> a0 #sum :: Num a0 => Interval a a0 -> a0 #product :: Num a0 => Interval a a0 -> a0 # Source # Instance detailsDefined in Data.Geometry.Interval Methodstraverse :: Applicative f => (a0 -> f b) -> Interval a a0 -> f (Interval a b) #sequenceA :: Applicative f => Interval a (f a0) -> f (Interval a a0) #mapM :: Monad m => (a0 -> m b) -> Interval a a0 -> m (Interval a b) #sequence :: Monad m => Interval a (m a0) -> m (Interval a a0) # (Eq r, Eq a) => Eq (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval Methods(==) :: Interval a r -> Interval a r -> Bool #(/=) :: Interval a r -> Interval a r -> Bool # (Show a, Show r) => Show (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval MethodsshowsPrec :: Int -> Interval a r -> ShowS #show :: Interval a r -> String #showList :: [Interval a r] -> ShowS # Generic (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval Associated Typestype Rep (Interval a r) :: * -> * # Methodsfrom :: Interval a r -> Rep (Interval a r) x #to :: Rep (Interval a r) x -> Interval a r # (Arbitrary r, Arbitrary p, Ord r, Ord p) => Arbitrary (Interval p r) # Instance detailsDefined in Test.QuickCheck.HGeometryInstances Methodsarbitrary :: Gen (Interval p r) #shrink :: Interval p r -> [Interval p r] # (NFData a, NFData r) => NFData (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval Methodsrnf :: Interval a r -> () # HasEnd (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval Associated Typestype EndCore (Interval a r) :: * Source #type EndExtra (Interval a r) :: * Source # Methodsend :: Lens' (Interval a r) (EndCore (Interval a r) :+ EndExtra (Interval a r)) Source # HasStart (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval Associated Typestype StartCore (Interval a r) :: * Source #type StartExtra (Interval a r) :: * Source # Methodsstart :: Lens' (Interval a r) (StartCore (Interval a r) :+ StartExtra (Interval a r)) Source # IntervalLike (Interval p r) Source # Instance detailsDefined in Data.Geometry.IntervalTree MethodstoRange :: Interval p r -> Range (NumType (Interval p r)) Source # Ord r => IsIntersectableWith (Interval a r) (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval Methodsintersect :: Interval a r -> Interval a r -> Intersection (Interval a r) (Interval a r) Source #intersects :: Interval a r -> Interval a r -> Bool Source #nonEmptyIntersection :: proxy (Interval a r) -> proxy (Interval a r) -> Intersection (Interval a r) (Interval a r) -> Bool Source # type Rep (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval type Rep (Interval a r) = D1 (MetaData "Interval" "Data.Geometry.Interval" "hgeometry-0.7.0.0-3y7zA7ljCTE9s6EHvXHItM" True) (C1 (MetaCons "GInterval" PrefixI True) (S1 (MetaSel (Just "_unInterval") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Range (r :+ a))))) type NumType (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval type NumType (Interval a r) = r type Dimension (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval type Dimension (Interval a r) = 1 type EndCore (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval type EndCore (Interval a r) = r type EndExtra (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval type EndExtra (Interval a r) = a type StartCore (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval type StartCore (Interval a r) = r type StartExtra (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval type StartExtra (Interval a r) = a type IntersectionOf (Interval a r) (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval type IntersectionOf (Interval a r) (Interval a r) = NoIntersection ': (Interval a r ': ([] :: [*]))

class HasEnd t where Source #

Minimal complete definition

end

Associated Types

type EndCore t Source #

type EndExtra t Source #

Methods

end :: Lens' t (EndCore t :+ EndExtra t) Source #

Instances
 HasEnd (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval Associated Typestype EndCore (Interval a r) :: * Source #type EndExtra (Interval a r) :: * Source # Methodsend :: Lens' (Interval a r) (EndCore (Interval a r) :+ EndExtra (Interval a r)) Source # HasEnd (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment Associated Typestype EndCore (LineSegment d p r) :: * Source #type EndExtra (LineSegment d p r) :: * Source # Methodsend :: Lens' (LineSegment d p r) (EndCore (LineSegment d p r) :+ EndExtra (LineSegment d p r)) Source #

class HasStart t where Source #

Minimal complete definition

start

Associated Types

type StartCore t Source #

type StartExtra t Source #

Methods

Instances
 HasStart (Interval a r) Source # Instance detailsDefined in Data.Geometry.Interval Associated Typestype StartCore (Interval a r) :: * Source #type StartExtra (Interval a r) :: * Source # Methodsstart :: Lens' (Interval a r) (StartCore (Interval a r) :+ StartExtra (Interval a r)) Source # HasStart (HalfLine d r) Source # Instance detailsDefined in Data.Geometry.HalfLine Associated Typestype StartCore (HalfLine d r) :: * Source #type StartExtra (HalfLine d r) :: * Source # Methodsstart :: Lens' (HalfLine d r) (StartCore (HalfLine d r) :+ StartExtra (HalfLine d r)) Source # HasStart (LineSegment d p r) Source # Instance detailsDefined in Data.Geometry.LineSegment Associated Typestype StartCore (LineSegment d p r) :: * Source #type StartExtra (LineSegment d p r) :: * Source # Methodsstart :: Lens' (LineSegment d p r) (StartCore (LineSegment d p r) :+ StartExtra (LineSegment d p r)) Source #

pattern Interval :: EndPoint (r :+ a) -> EndPoint (r :+ a) -> Interval a r Source #

pattern ClosedInterval :: (r :+ a) -> (r :+ a) -> Interval a r Source #

pattern OpenInterval :: (r :+ a) -> (r :+ a) -> Interval a r Source #

inInterval :: Ord r => r -> Interval a r -> Bool Source #

Test if a value lies in an interval. Note that the difference between inInterval and inRange is that the extra value is *not* used in the comparison with inInterval, whereas it is in inRange.

shiftLeft' :: Num r => r -> Interval a r -> Interval a r Source #

toLineSegment :: (Monoid p, Num r, Arity d) => Line d r -> LineSegment d p r Source #

Directly convert a line into a line segment.

onSegment :: (Ord r, Fractional r, Arity d) => Point d r -> LineSegment d p r -> Bool Source #

Test if a point lies on a line segment.

>>> (point2 1 0) onSegment (ClosedLineSegment (origin :+ ()) (point2 2 0 :+ ()))
True
>>> (point2 1 1) onSegment (ClosedLineSegment (origin :+ ()) (point2 2 0 :+ ()))
False
>>> (point2 5 0) onSegment (ClosedLineSegment (origin :+ ()) (point2 2 0 :+ ()))
False
>>> (point2 (-1) 0) onSegment (ClosedLineSegment (origin :+ ()) (point2 2 0 :+ ()))
False
>>> (point2 1 1) onSegment (ClosedLineSegment (origin :+ ()) (point2 3 3 :+ ()))
True


Note that the segments are assumed to be closed. So the end points lie on the segment.

>>> (point2 2 0) onSegment (ClosedLineSegment (origin :+ ()) (point2 2 0 :+ ()))
True
>>> origin onSegment (ClosedLineSegment (origin :+ ()) (point2 2 0 :+ ()))
True


This function works for arbitrary dimensons.

>>> (point3 1 1 1) onSegment (ClosedLineSegment (origin :+ ()) (point3 3 3 3 :+ ()))
True
>>> (point3 1 2 1) onSegment (ClosedLineSegment (origin :+ ()) (point3 3 3 3 :+ ()))
False


orderedEndPoints :: Ord r => LineSegment 2 p r -> (Point 2 r :+ p, Point 2 r :+ p) Source #

The left and right end point (or left below right if they have equal x-coords)

segmentLength :: (Arity d, Floating r) => LineSegment d p r -> r Source #

Length of the line segment

sqDistanceToSeg :: (Arity d, Fractional r, Ord r) => Point d r -> LineSegment d p r -> r Source #

Squared distance from the point to the Segment s. The same remark as for the sqDistanceToSegArg applies here.

sqDistanceToSegArg :: (Arity d, Fractional r, Ord r) => Point d r -> LineSegment d p r -> (r, Point d r) Source #

Squared distance from the point to the Segment s, and the point on s realizing it. Note that if the segment is *open*, the closest point returned may be one of the (open) end points, even though technically the end point does not lie on the segment. (The true closest point then lies arbitrarily close to the end point).

flipSegment :: LineSegment d p r -> LineSegment d p r Source #

flips the start and end point of the segment