hgeometry
Copyright(C) Frank Staals
Licensesee the LICENSE file
MaintainerFrank Staals
Safe HaskellNone
LanguageGHC2024

HGeometry.Plane.LowerEnvelope.Connected

Description

A Representation of the Lower envelope of planes as a bunch of convex regions

Synopsis

Documentation

newtype MinimizationDiagram r vertex plane Source #

A minimization daigram just maps every plane on the lower envelope to the region above which it is minimal. Every plane has at most one such a region.

Constructors

MinimizationDiagram (NEMap plane (Region r vertex)) 

Instances

Instances details
CFunctor (MinimizationDiagram r vertex) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

cmap :: (Dom (MinimizationDiagram r vertex) a, Dom (MinimizationDiagram r vertex) b) => (a -> b) -> MinimizationDiagram r vertex a -> MinimizationDiagram r vertex b Source #

(<$:) :: (Dom (MinimizationDiagram r vertex) a, Dom (MinimizationDiagram r vertex) b) => a -> MinimizationDiagram r vertex b -> MinimizationDiagram r vertex a Source #

Constrained (MinimizationDiagram r vertex) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

(NFData plane, NFData r, NFData vertex) => NFData (MinimizationDiagram r vertex plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

rnf :: MinimizationDiagram r vertex plane -> () #

Generic (MinimizationDiagram r vertex plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Associated Types

type Rep (MinimizationDiagram r vertex plane) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Rep (MinimizationDiagram r vertex plane) = D1 ('MetaData "MinimizationDiagram" "HGeometry.Plane.LowerEnvelope.Connected.Type" "hgeometry-1.0.0.0-inplace" 'True) (C1 ('MetaCons "MinimizationDiagram" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NEMap plane (Region r vertex)))))

Methods

from :: MinimizationDiagram r vertex plane -> Rep (MinimizationDiagram r vertex plane) x #

to :: Rep (MinimizationDiagram r vertex plane) x -> MinimizationDiagram r vertex plane #

(Show plane, Show r, Show vertex, Point_ vertex 2 r) => Show (MinimizationDiagram r vertex plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

showsPrec :: Int -> MinimizationDiagram r vertex plane -> ShowS #

show :: MinimizationDiagram r vertex plane -> String #

showList :: [MinimizationDiagram r vertex plane] -> ShowS #

(Eq plane, Eq r, Eq vertex) => Eq (MinimizationDiagram r vertex plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

(==) :: MinimizationDiagram r vertex plane -> MinimizationDiagram r vertex plane -> Bool #

(/=) :: MinimizationDiagram r vertex plane -> MinimizationDiagram r vertex plane -> Bool #

type Dom (MinimizationDiagram r vertex) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Dom (MinimizationDiagram r vertex) plane = (Ord plane, NumType plane ~ r)
type Rep (MinimizationDiagram r vertex plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Rep (MinimizationDiagram r vertex plane) = D1 ('MetaData "MinimizationDiagram" "HGeometry.Plane.LowerEnvelope.Connected.Type" "hgeometry-1.0.0.0-inplace" 'True) (C1 ('MetaCons "MinimizationDiagram" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NEMap plane (Region r vertex)))))
type Dimension (MinimizationDiagram r vertex plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Dimension (MinimizationDiagram r vertex plane) = 2
type NumType (MinimizationDiagram r vertex plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type NumType (MinimizationDiagram r vertex plane) = r

asMap :: MinimizationDiagram r vertex plane -> NEMap plane (Region r vertex) Source #

Get the underlying Map that relates every plane in the envelope to its projected region

mapVertices :: (vertex -> vertex') -> MinimizationDiagram r vertex plane -> MinimizationDiagram r vertex' plane Source #

Apply some mapping function to the vertex data of each vertex

data Region r vertex Source #

A region in the minimization diagram. The boundary is given in CCW order; i.e. the region is to the left of the boundary.

Constructors

BoundedRegion (ConvexPolygonF (Cyclic NonEmpty) vertex) 
UnboundedRegion (UnboundedConvexRegionF r NonEmpty vertex) 

Instances

Instances details
Functor (Region r) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

fmap :: (a -> b) -> Region r a -> Region r b #

(<$) :: a -> Region r b -> Region r a #

Foldable (Region r) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

fold :: Monoid m => Region r m -> m #

foldMap :: Monoid m => (a -> m) -> Region r a -> m #

foldMap' :: Monoid m => (a -> m) -> Region r a -> m #

foldr :: (a -> b -> b) -> b -> Region r a -> b #

foldr' :: (a -> b -> b) -> b -> Region r a -> b #

foldl :: (b -> a -> b) -> b -> Region r a -> b #

foldl' :: (b -> a -> b) -> b -> Region r a -> b #

foldr1 :: (a -> a -> a) -> Region r a -> a #

foldl1 :: (a -> a -> a) -> Region r a -> a #

toList :: Region r a -> [a] #

null :: Region r a -> Bool #

length :: Region r a -> Int #

elem :: Eq a => a -> Region r a -> Bool #

maximum :: Ord a => Region r a -> a #

minimum :: Ord a => Region r a -> a #

sum :: Num a => Region r a -> a #

product :: Num a => Region r a -> a #

Traversable (Region r) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

traverse :: Applicative f => (a -> f b) -> Region r a -> f (Region r b) #

sequenceA :: Applicative f => Region r (f a) -> f (Region r a) #

mapM :: Monad m => (a -> m b) -> Region r a -> m (Region r b) #

sequence :: Monad m => Region r (m a) -> m (Region r a) #

(Point_ vertex 2 r, Point_ corner 2 r, Ord r, Fractional r) => HasIntersectionWith (Rectangle corner) (Region r vertex) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Clipped.Type

Methods

intersects :: Rectangle corner -> Region r vertex -> Bool

(Point_ vertex 2 r, Point_ corner 2 r, Ord r, Fractional r) => HasIntersectionWith (Triangle corner) (Region r vertex) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Clipped.Type

Methods

intersects :: Triangle corner -> Region r vertex -> Bool

(Point_ vertex 2 r, Point_ corner 2 r, Ord r, Fractional r) => IsIntersectableWith (Rectangle corner) (Region r vertex) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Clipped.Type

Methods

intersect :: Rectangle corner -> Region r vertex -> Intersection (Rectangle corner) (Region r vertex)

(Point_ vertex 2 r, Point_ corner 2 r, Ord r, Fractional r) => IsIntersectableWith (Triangle corner) (Region r vertex) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Clipped.Type

Methods

intersect :: Triangle corner -> Region r vertex -> Intersection (Triangle corner) (Region r vertex)

(NFData r, NFData vertex) => NFData (Region r vertex) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

rnf :: Region r vertex -> () #

Generic (Region r vertex) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Associated Types

type Rep (Region r vertex) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

type Rep (Region r vertex) = D1 ('MetaData "Region" "HGeometry.Plane.LowerEnvelope.Connected.Region" "hgeometry-1.0.0.0-inplace" 'False) (C1 ('MetaCons "BoundedRegion" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ConvexPolygonF (Cyclic NonEmpty) vertex))) :+: C1 ('MetaCons "UnboundedRegion" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (UnboundedConvexRegionF r NonEmpty vertex))))

Methods

from :: Region r vertex -> Rep (Region r vertex) x #

to :: Rep (Region r vertex) x -> Region r vertex #

(Show r, Show vertex, Point_ vertex 2 r) => Show (Region r vertex) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

showsPrec :: Int -> Region r vertex -> ShowS #

show :: Region r vertex -> String #

showList :: [Region r vertex] -> ShowS #

(Eq r, Eq vertex) => Eq (Region r vertex) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

(==) :: Region r vertex -> Region r vertex -> Bool #

(/=) :: Region r vertex -> Region r vertex -> Bool #

type Intersection (Rectangle corner) (Region r vertex)

Intersecting Rectangle and Region in a MinimizationDiagram yields a clipped cell.

Instance details

Defined in HGeometry.Plane.LowerEnvelope.Clipped.Type

type Intersection (Rectangle corner) (Region r vertex) = Maybe (ClippedMDCell' r vertex)
type Intersection (Triangle corner) (Region r vertex)

Intersecting Triangles and Region in a MinimizationDiagram yields a clipped cell.

Instance details

Defined in HGeometry.Plane.LowerEnvelope.Clipped.Type

type Intersection (Triangle corner) (Region r vertex) = Maybe (ClippedMDCell' r vertex)
type Rep (Region r vertex) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

type Rep (Region r vertex) = D1 ('MetaData "Region" "HGeometry.Plane.LowerEnvelope.Connected.Region" "hgeometry-1.0.0.0-inplace" 'False) (C1 ('MetaCons "BoundedRegion" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ConvexPolygonF (Cyclic NonEmpty) vertex))) :+: C1 ('MetaCons "UnboundedRegion" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (UnboundedConvexRegionF r NonEmpty vertex))))
type Dimension (Region r point) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

type Dimension (Region r point) = Dimension point
type NumType (Region r point) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

type NumType (Region r point) = r

data MDVertex r plane a Source #

A vertex of the minimzation Diagram that is defined by the intersection of a number of planes.

Note that we interpet this vertex as a 2-dimensional thing.

Constructors

MDVertex (Point 3 r) (Definers plane) a 

Instances

Instances details
Bifoldable (MDVertex r) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

bifold :: Monoid m => MDVertex r m m -> m #

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> MDVertex r a b -> m #

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> MDVertex r a b -> c #

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> MDVertex r a b -> c #

Bifunctor (MDVertex r) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

bimap :: (a -> b) -> (c -> d) -> MDVertex r a c -> MDVertex r b d #

first :: (a -> b) -> MDVertex r a c -> MDVertex r b c #

second :: (b -> c) -> MDVertex r a b -> MDVertex r a c #

Functor (MDVertex r plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

fmap :: (a -> b) -> MDVertex r plane a -> MDVertex r plane b #

(<$) :: a -> MDVertex r plane b -> MDVertex r plane a #

Foldable (MDVertex r plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

fold :: Monoid m => MDVertex r plane m -> m #

foldMap :: Monoid m => (a -> m) -> MDVertex r plane a -> m #

foldMap' :: Monoid m => (a -> m) -> MDVertex r plane a -> m #

foldr :: (a -> b -> b) -> b -> MDVertex r plane a -> b #

foldr' :: (a -> b -> b) -> b -> MDVertex r plane a -> b #

foldl :: (b -> a -> b) -> b -> MDVertex r plane a -> b #

foldl' :: (b -> a -> b) -> b -> MDVertex r plane a -> b #

foldr1 :: (a -> a -> a) -> MDVertex r plane a -> a #

foldl1 :: (a -> a -> a) -> MDVertex r plane a -> a #

toList :: MDVertex r plane a -> [a] #

null :: MDVertex r plane a -> Bool #

length :: MDVertex r plane a -> Int #

elem :: Eq a => a -> MDVertex r plane a -> Bool #

maximum :: Ord a => MDVertex r plane a -> a #

minimum :: Ord a => MDVertex r plane a -> a #

sum :: Num a => MDVertex r plane a -> a #

product :: Num a => MDVertex r plane a -> a #

(NFData r, NFData plane, NFData a) => NFData (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

rnf :: MDVertex r plane a -> () #

Generic (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Associated Types

type Rep (MDVertex r plane a) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

type Rep (MDVertex r plane a) = D1 ('MetaData "MDVertex" "HGeometry.Plane.LowerEnvelope.Connected.Region" "hgeometry-1.0.0.0-inplace" 'False) (C1 ('MetaCons "MDVertex" 'PrefixI 'True) (S1 ('MetaSel ('Just "_location") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Point 3 r)) :*: (S1 ('MetaSel ('Just "_definers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Definers plane)) :*: S1 ('MetaSel ('Just "_vertexData") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))))

Methods

from :: MDVertex r plane a -> Rep (MDVertex r plane a) x #

to :: Rep (MDVertex r plane a) x -> MDVertex r plane a #

(Show r, Show plane, Show a) => Show (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

showsPrec :: Int -> MDVertex r plane a -> ShowS #

show :: MDVertex r plane a -> String #

showList :: [MDVertex r plane a] -> ShowS #

(Eq r, Eq plane, Eq a) => Eq (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

(==) :: MDVertex r plane a -> MDVertex r plane a -> Bool #

(/=) :: MDVertex r plane a -> MDVertex r plane a -> Bool #

(Ord r, Ord plane, Ord a) => Ord (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

compare :: MDVertex r plane a -> MDVertex r plane a -> Ordering #

(<) :: MDVertex r plane a -> MDVertex r plane a -> Bool #

(<=) :: MDVertex r plane a -> MDVertex r plane a -> Bool #

(>) :: MDVertex r plane a -> MDVertex r plane a -> Bool #

(>=) :: MDVertex r plane a -> MDVertex r plane a -> Bool #

max :: MDVertex r plane a -> MDVertex r plane a -> MDVertex r plane a #

min :: MDVertex r plane a -> MDVertex r plane a -> MDVertex r plane a #

Num r => IsBoxable (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

boundingBox :: forall (d :: Nat) r0. (d ~ Dimension (MDVertex r plane a), r0 ~ NumType (MDVertex r plane a), Ord r0) => MDVertex r plane a -> Box (Point d r0) #

HasDefiners (MDVertex r plane a) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

definersOf :: MDVertex r plane a -> Definers plane Source #

Affine_ (MDVertex r plane a) 2 r Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

(.-.) :: MDVertex r plane a -> MDVertex r plane a -> Vector 2 r #

(.+^) :: MDVertex r plane a -> Vector 2 r -> MDVertex r plane a #

(.-^) :: MDVertex r plane a -> Vector 2 r -> MDVertex r plane a #

Num r => Point_ (MDVertex r plane a) 2 r Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

coord' :: Int -> IndexedTraversal' Int (MDVertex r plane a) r #

HasCoordinates (MDVertex r plane a) (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

coordinates :: IndexedTraversal1 Int (MDVertex r plane a) (MDVertex r plane a) (NumType (MDVertex r plane a)) (NumType (MDVertex r plane a)) #

HasVector (MDVertex r plane a) (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

vector :: forall (d :: Nat) r0 s. (Dimension (MDVertex r plane a) ~ d, NumType (MDVertex r plane a) ~ r0, Dimension (MDVertex r plane a) ~ d, NumType (MDVertex r plane a) ~ s) => Lens (MDVertex r plane a) (MDVertex r plane a) (Vector d r0) (Vector d s) #

type Rep (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

type Rep (MDVertex r plane a) = D1 ('MetaData "MDVertex" "HGeometry.Plane.LowerEnvelope.Connected.Region" "hgeometry-1.0.0.0-inplace" 'False) (C1 ('MetaCons "MDVertex" 'PrefixI 'True) (S1 ('MetaSel ('Just "_location") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Point 3 r)) :*: (S1 ('MetaSel ('Just "_definers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Definers plane)) :*: S1 ('MetaSel ('Just "_vertexData") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))))
type Dimension (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

type Dimension (MDVertex r plane a) = 2
type NumType (MDVertex r plane a) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

type NumType (MDVertex r plane a) = r

location :: forall r1 plane a r2 f. Functor f => (Point 3 r1 -> f (Point 3 r2)) -> MDVertex r1 plane a -> f (MDVertex r2 plane a) Source #

vertexData :: forall r plane a1 a2 f. Functor f => (a1 -> f a2) -> MDVertex r plane a1 -> f (MDVertex r plane a2) Source #

toConvexPolygonIn :: (Rectangle_ rectangle corner, Point_ corner 2 r, Point_ point 2 r, Ord r, Fractional r) => rectangle -> Region r point -> Either (ConvexPolygonF (Cyclic NonEmpty) point) (ConvexPolygonF (Cyclic NonEmpty) (OriginalOrExtra point (Point 2 r))) Source #

Computes a convex polygon corresponding to the region.

pre: the bounding box (strictly) contains all vertices in its interior

intersectionLine :: (Plane_ plane r, Fractional r, Eq r) => plane -> plane -> Maybe (VerticalOrLineEQ r) Source #

Given two planes, computes the line in which they intersect.

intersectionPoint :: (Plane_ plane r, Ord r, Fractional r) => Three plane -> Maybe (Point 3 r) Source #

Computes there the three planes intersect

intersectionVector :: (Plane_ plane r, Ord r, Fractional r) => plane -> plane -> Maybe (Vector 2 r) Source #

Computes the direction vector v of the directed line l in which the two planes h and h' intersect, and so that h will be to the left of the directed line

fromMinimizationDiagramIn :: (Plane_ plane r, Ord plane, Ord r, Fractional r, Point_ corner 2 r, Foldable1 set, Ord vtxData, Show r, Show corner, Show plane, Show vtxData) => Triangle corner -> set plane -> Maybe (MinimizationDiagram r (MDVertex r plane vtxData) plane) -> NEMap plane (ClippedMDCell r plane vtxData) Source #

Compute a clipped minimization diagram within the given triangle

The result is essentially a ClippedMinimizationDiagram.

fromVertexForm :: (Plane_ plane r, Ord plane, Ord r, Fractional r, Show r, Show plane, Ord vtxData, HasDefiners vtxData plane) => NEMap (Point 3 r) vtxData -> MinimizationDiagram r (MDVertex r plane vtxData) plane Source #

Given the vertices of the lower envelope; compute the minimization diagram.

\(O(h\log h)\) assuming that the input is non-degenerate.

fromVertexFormIn :: (Plane_ plane r, Ord plane, Ord r, Fractional r, Show r, Show plane, Point_ corner 2 r, Foldable1 set, Show r, Show corner, Show vertexData, Ord vertexData, HasDefiners vertexData plane) => Triangle corner -> set plane -> NEMap (Point 3 r) vertexData -> NEMap plane (ClippedMDCell r plane vertexData) Source #

Computes the part of the minimization diagram inside the given triangle.

This function takes both the set of planes, as well as the vertex form of the lower envelope of these planes.

mergeDefiners :: (Plane_ plane r, Ord plane, Ord r, Fractional r, Show plane, Show r) => Point 3 r -> Definers plane -> Definers plane -> Definers plane Source #

Merge two lists of definers.

\(O(n\log n)\), where \(n\) is the total number of planes involved.

definers :: (Plane_ plane r, Ord r, Fractional r) => Three plane -> Maybe (Point 3 r, Definers plane) Source #

Smart constructor for creating the definers of three planes

fromCCWList :: NonEmpty plane -> Definers plane Source #

Given the planes in order, starting with the one that is closest in the up direction, construct the Definers.

type ClippedBoundedRegion (r :: k) vertex corner = ConvexPolygonF (Cyclic NonEmpty) (OriginalOrExtra vertex corner) Source #

A Convex bounded region, which may be clipped using vertices of type corner.

data Definers plane Source #

in CCW order, starting with the plane that is minimal at the vertical up direction from their common vertex.

Instances

Instances details
Foldable1 Definers Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

fold1 :: Semigroup m => Definers m -> m #

foldMap1 :: Semigroup m => (a -> m) -> Definers a -> m #

foldMap1' :: Semigroup m => (a -> m) -> Definers a -> m #

toNonEmpty :: Definers a -> NonEmpty a #

maximum :: Ord a => Definers a -> a #

minimum :: Ord a => Definers a -> a #

head :: Definers a -> a #

last :: Definers a -> a #

foldrMap1 :: (a -> b) -> (a -> b -> b) -> Definers a -> b #

foldlMap1' :: (a -> b) -> (b -> a -> b) -> Definers a -> b #

foldlMap1 :: (a -> b) -> (b -> a -> b) -> Definers a -> b #

foldrMap1' :: (a -> b) -> (a -> b -> b) -> Definers a -> b #

Functor Definers Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

fmap :: (a -> b) -> Definers a -> Definers b #

(<$) :: a -> Definers b -> Definers a #

Foldable Definers Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

fold :: Monoid m => Definers m -> m #

foldMap :: Monoid m => (a -> m) -> Definers a -> m #

foldMap' :: Monoid m => (a -> m) -> Definers a -> m #

foldr :: (a -> b -> b) -> b -> Definers a -> b #

foldr' :: (a -> b -> b) -> b -> Definers a -> b #

foldl :: (b -> a -> b) -> b -> Definers a -> b #

foldl' :: (b -> a -> b) -> b -> Definers a -> b #

foldr1 :: (a -> a -> a) -> Definers a -> a #

foldl1 :: (a -> a -> a) -> Definers a -> a #

toList :: Definers a -> [a] #

null :: Definers a -> Bool #

length :: Definers a -> Int #

elem :: Eq a => a -> Definers a -> Bool #

maximum :: Ord a => Definers a -> a #

minimum :: Ord a => Definers a -> a #

sum :: Num a => Definers a -> a #

product :: Num a => Definers a -> a #

NFData plane => NFData (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

rnf :: Definers plane -> () #

Generic (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Associated Types

type Rep (Definers plane) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

type Rep (Definers plane) = D1 ('MetaData "Definers" "HGeometry.Plane.LowerEnvelope.Connected.VertexForm" "hgeometry-1.0.0.0-inplace" 'True) (C1 ('MetaCons "Definers" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty plane))))

Methods

from :: Definers plane -> Rep (Definers plane) x #

to :: Rep (Definers plane) x -> Definers plane #

Show plane => Show (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

showsPrec :: Int -> Definers plane -> ShowS #

show :: Definers plane -> String #

showList :: [Definers plane] -> ShowS #

Eq plane => Eq (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

(==) :: Definers plane -> Definers plane -> Bool #

(/=) :: Definers plane -> Definers plane -> Bool #

Ord plane => Ord (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

compare :: Definers plane -> Definers plane -> Ordering #

(<) :: Definers plane -> Definers plane -> Bool #

(<=) :: Definers plane -> Definers plane -> Bool #

(>) :: Definers plane -> Definers plane -> Bool #

(>=) :: Definers plane -> Definers plane -> Bool #

max :: Definers plane -> Definers plane -> Definers plane #

min :: Definers plane -> Definers plane -> Definers plane #

HasDefiners (Definers plane) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: Definers plane -> Definers plane Source #

HasDefiners (core :+ Definers plane) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: (core :+ Definers plane) -> Definers plane Source #

HasDefiners (Definers plane, b) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: (Definers plane, b) -> Definers plane Source #

type Rep (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

type Rep (Definers plane) = D1 ('MetaData "Definers" "HGeometry.Plane.LowerEnvelope.Connected.VertexForm" "hgeometry-1.0.0.0-inplace" 'True) (C1 ('MetaCons "Definers" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty plane))))

type VertexForm (map :: Type -> Type -> k) r plane = map (Point 3 r) (Definers plane) Source #

The vertices of a lower envelope is just a Map with every vertex its definers, i.e. the planes that define the vertex in CCW order around it.

definers :: (Plane_ plane r, Ord r, Fractional r) => Three plane -> Maybe (Point 3 r, Definers plane) Source #

Smart constructor for creating the definers of three planes

fromCCWList :: NonEmpty plane -> Definers plane Source #

Given the planes in order, starting with the one that is closest in the up direction, construct the Definers.

newtype Definers plane Source #

in CCW order, starting with the plane that is minimal at the vertical up direction from their common vertex.

Constructors

Definers (NonEmpty plane) 

Instances

Instances details
Foldable1 Definers Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

fold1 :: Semigroup m => Definers m -> m #

foldMap1 :: Semigroup m => (a -> m) -> Definers a -> m #

foldMap1' :: Semigroup m => (a -> m) -> Definers a -> m #

toNonEmpty :: Definers a -> NonEmpty a #

maximum :: Ord a => Definers a -> a #

minimum :: Ord a => Definers a -> a #

head :: Definers a -> a #

last :: Definers a -> a #

foldrMap1 :: (a -> b) -> (a -> b -> b) -> Definers a -> b #

foldlMap1' :: (a -> b) -> (b -> a -> b) -> Definers a -> b #

foldlMap1 :: (a -> b) -> (b -> a -> b) -> Definers a -> b #

foldrMap1' :: (a -> b) -> (a -> b -> b) -> Definers a -> b #

Functor Definers Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

fmap :: (a -> b) -> Definers a -> Definers b #

(<$) :: a -> Definers b -> Definers a #

Foldable Definers Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

fold :: Monoid m => Definers m -> m #

foldMap :: Monoid m => (a -> m) -> Definers a -> m #

foldMap' :: Monoid m => (a -> m) -> Definers a -> m #

foldr :: (a -> b -> b) -> b -> Definers a -> b #

foldr' :: (a -> b -> b) -> b -> Definers a -> b #

foldl :: (b -> a -> b) -> b -> Definers a -> b #

foldl' :: (b -> a -> b) -> b -> Definers a -> b #

foldr1 :: (a -> a -> a) -> Definers a -> a #

foldl1 :: (a -> a -> a) -> Definers a -> a #

toList :: Definers a -> [a] #

null :: Definers a -> Bool #

length :: Definers a -> Int #

elem :: Eq a => a -> Definers a -> Bool #

maximum :: Ord a => Definers a -> a #

minimum :: Ord a => Definers a -> a #

sum :: Num a => Definers a -> a #

product :: Num a => Definers a -> a #

NFData plane => NFData (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

rnf :: Definers plane -> () #

Generic (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Associated Types

type Rep (Definers plane) 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

type Rep (Definers plane) = D1 ('MetaData "Definers" "HGeometry.Plane.LowerEnvelope.Connected.VertexForm" "hgeometry-1.0.0.0-inplace" 'True) (C1 ('MetaCons "Definers" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty plane))))

Methods

from :: Definers plane -> Rep (Definers plane) x #

to :: Rep (Definers plane) x -> Definers plane #

Show plane => Show (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

showsPrec :: Int -> Definers plane -> ShowS #

show :: Definers plane -> String #

showList :: [Definers plane] -> ShowS #

Eq plane => Eq (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

(==) :: Definers plane -> Definers plane -> Bool #

(/=) :: Definers plane -> Definers plane -> Bool #

Ord plane => Ord (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

compare :: Definers plane -> Definers plane -> Ordering #

(<) :: Definers plane -> Definers plane -> Bool #

(<=) :: Definers plane -> Definers plane -> Bool #

(>) :: Definers plane -> Definers plane -> Bool #

(>=) :: Definers plane -> Definers plane -> Bool #

max :: Definers plane -> Definers plane -> Definers plane #

min :: Definers plane -> Definers plane -> Definers plane #

HasDefiners (Definers plane) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: Definers plane -> Definers plane Source #

HasDefiners (core :+ Definers plane) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: (core :+ Definers plane) -> Definers plane Source #

HasDefiners (Definers plane, b) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: (Definers plane, b) -> Definers plane Source #

type Rep (Definers plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

type Rep (Definers plane) = D1 ('MetaData "Definers" "HGeometry.Plane.LowerEnvelope.Connected.VertexForm" "hgeometry-1.0.0.0-inplace" 'True) (C1 ('MetaCons "Definers" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty plane))))

class HasDefiners vertex plane | vertex -> plane where Source #

Methods

definersOf :: vertex -> Definers plane Source #

Access the definers of some object

Instances

Instances details
HasDefiners (Definers plane) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: Definers plane -> Definers plane Source #

HasDefiners (core :+ Definers plane) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: (core :+ Definers plane) -> Definers plane Source #

HasDefiners (Definers plane, b) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.VertexForm

Methods

definersOf :: (Definers plane, b) -> Definers plane Source #

HasDefiners (MDVertex r plane a) plane Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Region

Methods

definersOf :: MDVertex r plane a -> Definers plane Source #

type VertexForm (map :: Type -> Type -> k) r plane = map (Point 3 r) (Definers plane) Source #

The vertices of a lower envelope is just a Map with every vertex its definers, i.e. the planes that define the vertex in CCW order around it.