hgeometry
Safe HaskellNone
LanguageGHC2024

HGeometry.HalfPlane.CommonIntersection

Synopsis

Documentation

data CommonIntersection halfPlane r Source #

A type represetning the Common intersection of a bunch of halfplanes; assuming this intersection is non-empty.

Constructors

SingletonPoint (Point 2 r) (Vector 3 halfPlane)

Common intersection is a singleton point, defined by the three given halfplanes

InSubLine (VerticalOrLineEQ r) (Vector 2 halfPlane) (SubLine halfPlane r)

The two halfPlanes that define the line, and the other halfplanes furthe restricitng the line.

Slab halfPlane halfPlane

two parallel halfPlanes l and u that form a slab;

BoundedRegion (ConvexPolygon (Point 2 r :+ halfPlane))

each vertex stores the interior halfplane of the CCW-edge it is incident to.

UnboundedRegion (Chain Seq r halfPlane)

each vertex stores the interior halfplane of the CCW-edge it is incident to.

Instances

Instances details
(Show r, Show halfPlane) => Show (CommonIntersection halfPlane r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection

Methods

showsPrec :: Int -> CommonIntersection halfPlane r -> ShowS Source #

show :: CommonIntersection halfPlane r -> String Source #

showList :: [CommonIntersection halfPlane r] -> ShowS Source #

(Eq r, Eq halfPlane) => Eq (CommonIntersection halfPlane r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection

Methods

(==) :: CommonIntersection halfPlane r -> CommonIntersection halfPlane r -> Bool Source #

(/=) :: CommonIntersection halfPlane r -> CommonIntersection halfPlane r -> Bool Source #

data SubLine halfPlane r Source #

Part of the line

Constructors

EntireLine 
InHalfLine (HalfLine (Point 2 r)) halfPlane

the third halfPlane

InSegment (ClosedLineSegment (Point 2 r)) halfPlane halfPlane

the remaining two halfplanes

Instances

Instances details
(Show r, Show halfPlane) => Show (SubLine halfPlane r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection

Methods

showsPrec :: Int -> SubLine halfPlane r -> ShowS Source #

show :: SubLine halfPlane r -> String Source #

showList :: [SubLine halfPlane r] -> ShowS Source #

(Eq r, Eq halfPlane) => Eq (SubLine halfPlane r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection

Methods

(==) :: SubLine halfPlane r -> SubLine halfPlane r -> Bool Source #

(/=) :: SubLine halfPlane r -> SubLine halfPlane r -> Bool Source #

newtype Chain (f :: Type -> Type) r halfPlane Source #

A polygonal chain bounding an unbounded convex region, in CCW order.

Constructors

Chain (Alternating f (Point 2 r) halfPlane) 

Instances

Instances details
Foldable f => Bifoldable (Chain f) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

bifold :: Monoid m => Chain f m m -> m Source #

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> Chain f a b -> m Source #

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> Chain f a b -> c Source #

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> Chain f a b -> c Source #

Functor f => Bifunctor (Chain f) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

bimap :: (a -> b) -> (c -> d) -> Chain f a c -> Chain f b d Source #

first :: (a -> b) -> Chain f a c -> Chain f b c Source #

second :: (b -> c) -> Chain f a b -> Chain f a c Source #

Foldable f => Foldable1 (Chain f r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

fold1 :: Semigroup m => Chain f r m -> m Source #

foldMap1 :: Semigroup m => (a -> m) -> Chain f r a -> m Source #

foldMap1' :: Semigroup m => (a -> m) -> Chain f r a -> m Source #

toNonEmpty :: Chain f r a -> NonEmpty a Source #

maximum :: Ord a => Chain f r a -> a Source #

minimum :: Ord a => Chain f r a -> a Source #

head :: Chain f r a -> a Source #

last :: Chain f r a -> a Source #

foldrMap1 :: (a -> b) -> (a -> b -> b) -> Chain f r a -> b Source #

foldlMap1' :: (a -> b) -> (b -> a -> b) -> Chain f r a -> b Source #

foldlMap1 :: (a -> b) -> (b -> a -> b) -> Chain f r a -> b Source #

foldrMap1' :: (a -> b) -> (a -> b -> b) -> Chain f r a -> b Source #

Functor f => Functor (Chain f r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

fmap :: (a -> b) -> Chain f r a -> Chain f r b Source #

(<$) :: a -> Chain f r b -> Chain f r a Source #

Foldable f => Foldable (Chain f r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

fold :: Monoid m => Chain f r m -> m Source #

foldMap :: Monoid m => (a -> m) -> Chain f r a -> m Source #

foldMap' :: Monoid m => (a -> m) -> Chain f r a -> m Source #

foldr :: (a -> b -> b) -> b -> Chain f r a -> b Source #

foldr' :: (a -> b -> b) -> b -> Chain f r a -> b Source #

foldl :: (b -> a -> b) -> b -> Chain f r a -> b Source #

foldl' :: (b -> a -> b) -> b -> Chain f r a -> b Source #

foldr1 :: (a -> a -> a) -> Chain f r a -> a Source #

foldl1 :: (a -> a -> a) -> Chain f r a -> a Source #

toList :: Chain f r a -> [a] Source #

null :: Chain f r a -> Bool Source #

length :: Chain f r a -> Int Source #

elem :: Eq a => a -> Chain f r a -> Bool Source #

maximum :: Ord a => Chain f r a -> a Source #

minimum :: Ord a => Chain f r a -> a Source #

sum :: Num a => Chain f r a -> a Source #

product :: Num a => Chain f r a -> a Source #

Traversable f => Traversable (Chain f r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

traverse :: Applicative f0 => (a -> f0 b) -> Chain f r a -> f0 (Chain f r b) Source #

sequenceA :: Applicative f0 => Chain f r (f0 a) -> f0 (Chain f r a) Source #

mapM :: Monad m => (a -> m b) -> Chain f r a -> m (Chain f r b) Source #

sequence :: Monad m => Chain f r (m a) -> m (Chain f r a) Source #

Traversable f => Traversable1 (Chain f r) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

traverse1 :: Apply f0 => (a -> f0 b) -> Chain f r a -> f0 (Chain f r b) Source #

sequence1 :: Apply f0 => Chain f r (f0 b) -> f0 (Chain f r b) Source #

(Show halfPlane, Show (f (Point 2 r, halfPlane))) => Show (Chain f r halfPlane) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

showsPrec :: Int -> Chain f r halfPlane -> ShowS Source #

show :: Chain f r halfPlane -> String Source #

showList :: [Chain f r halfPlane] -> ShowS Source #

(Eq halfPlane, Eq (f (Point 2 r, halfPlane))) => Eq (Chain f r halfPlane) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

(==) :: Chain f r halfPlane -> Chain f r halfPlane -> Bool Source #

(/=) :: Chain f r halfPlane -> Chain f r halfPlane -> Bool Source #

(Ord halfPlane, Ord (f (Point 2 r, halfPlane))) => Ord (Chain f r halfPlane) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

Methods

compare :: Chain f r halfPlane -> Chain f r halfPlane -> Ordering Source #

(<) :: Chain f r halfPlane -> Chain f r halfPlane -> Bool Source #

(<=) :: Chain f r halfPlane -> Chain f r halfPlane -> Bool Source #

(>) :: Chain f r halfPlane -> Chain f r halfPlane -> Bool Source #

(>=) :: Chain f r halfPlane -> Chain f r halfPlane -> Bool Source #

max :: Chain f r halfPlane -> Chain f r halfPlane -> Chain f r halfPlane Source #

min :: Chain f r halfPlane -> Chain f r halfPlane -> Chain f r halfPlane Source #

type NumType (Chain f r halfPlane) Source # 
Instance details

Defined in HGeometry.HalfPlane.CommonIntersection.Chain

type NumType (Chain f r halfPlane) = r

commonIntersection :: (Foldable1 f, Functor f, HalfPlane_ halfPlane r, Fractional r, Ord r, HyperPlane_ (BoundingHyperPlane halfPlane 2 r) 2 r, Show halfPlane, Show r) => f halfPlane -> Maybe (CommonIntersection halfPlane r) Source #

Computes the common intersection of a \(n\) halfplanes.

running time: \(O(n\log n)\)

boundaries :: (HalfPlane_ halfPlane r, Ord r, Fractional r, Show r, Show halfPlane) => NonVerticals halfPlane r -> These2 (Chain Seq r (LineEQ r :+ halfPlane)) Source #

Computes the upper boundary of the halfplanes that have negative sign, and the upper boundary of the halfplanes that have negative sign

clipUpperByLower :: (Ord r, Num r, HasIntersectionWith (Point 2 r) halfPlane) => Chain Seq r (line :+ halfPlane) -> Chain Seq r (line :+ halfPlane) -> Chain Seq r (line :+ halfPlane) Source #

given the upper and lower chain, clip the upper thain to retain only the vertices that are above the lower chain.