hgeometry-1.0.0.0: Geometric Algorithms, Data structures, and Data types.
Copyright(C) Frank Staals
Licensesee the LICENSE file
MaintainerFrank Staals
Safe HaskellSafe-Inferred
LanguageGHC2021

HGeometry.Plane.LowerEnvelope.Connected

Description

A Representation of the Lower envelope of planes in Adjacency-list form.

Synopsis

Documentation

data LowerEnvelope' plane Source #

A connected lower envelope in adjacencylist form.

invariant: there is always at least one bounded vertex.

Constructors

LowerEnvelope !(UnboundedVertex plane) (Seq (BoundedVertex plane)) 

Instances

Instances details
(Show plane, Show (NumType plane)) => Show (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

showsPrec :: Int -> LowerEnvelope' plane -> ShowS #

show :: LowerEnvelope' plane -> String #

showList :: [LowerEnvelope' plane] -> ShowS #

(Eq plane, Eq (NumType plane)) => Eq (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

(==) :: LowerEnvelope' plane -> LowerEnvelope' plane -> Bool #

(/=) :: LowerEnvelope' plane -> LowerEnvelope' plane -> Bool #

(Ord (NumType plane), Num (NumType plane)) => IsBoxable (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

boundingBox :: forall (d :: Nat) r. (d ~ Dimension (LowerEnvelope' plane), r ~ NumType (LowerEnvelope' plane), Ord r) => LowerEnvelope' plane -> Box (Point d r) Source #

HasDarts' (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Associated Types

type DartIx (LowerEnvelope' plane) Source #

type Dart (LowerEnvelope' plane) Source #

HasEdges' (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Associated Types

type Edge (LowerEnvelope' plane) Source #

type EdgeIx (LowerEnvelope' plane) Source #

HasVertices' (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Associated Types

type Vertex (LowerEnvelope' plane) Source #

type VertexIx (LowerEnvelope' plane) Source #

HasUnboundedEdges (LowerEnvelope' plane) (LEEdge plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

unboundedEdges :: Lens' (LowerEnvelope' plane) (Seq (LEEdge plane)) Source #

HasDarts (LowerEnvelope' plane) (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

HasEdges (LowerEnvelope' plane) (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

HasVertices (LowerEnvelope' plane) (LowerEnvelope' plane') Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Dimension (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Dimension (LowerEnvelope' plane) = 3
type NumType (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type NumType (LowerEnvelope' plane) = NumType plane
type Dart (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Dart (LowerEnvelope' plane) = LEEdge plane
type DartIx (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Edge (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Edge (LowerEnvelope' plane) = LEEdge plane
type EdgeIx (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Vertex (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

type Vertex (LowerEnvelope' plane)
type VertexIx (LowerEnvelope' plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

theUnboundedVertex :: Lens' (LowerEnvelope' plane) (UnboundedVertex plane) Source #

lens to access the unbounded vertex

boundedVertices :: Lens' (LowerEnvelope' plane) (Seq (BoundedVertex plane)) Source #

Lens to access the sequence of bounded vertices.

singleton :: (Plane_ plane r, Ord r, Fractional r, Ord plane) => LEVertex plane -> LowerEnvelope' plane Source #

Given a single Vertex, construct a LowerEnvelope' out of it.

fromVertexForm' :: forall plane r. (Plane_ plane r, Ord plane, Ord r, Fractional r, Show plane, Show r) => VertexForm plane -> LowerEnvelope' plane Source #

Given a Lower envelope in vertex form, construct the AdjacencyList representation out of it.

pre: The set of vertices is non-empty

\(O(n\log n)\)

data BoundedVertexF f plane Source #

Data type representing the bounded vertices of the lower envelope.

In the vertexform, the f will be Const (), i.e. we don't have adjacency information. But in case of Adjacencylist form we can implement it using a Sequence.

Constructors

Vertex !(Point 3 (NumType plane)) (Set plane) (f (LEEdge plane)) 

Instances

Instances details
(Show plane, Show (NumType plane), Show (f (LEEdge plane))) => Show (BoundedVertexF f plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Type

Methods

showsPrec :: Int -> BoundedVertexF f plane -> ShowS #

show :: BoundedVertexF f plane -> String #

showList :: [BoundedVertexF f plane] -> ShowS #

(Eq plane, Eq (NumType plane), Eq (f (LEEdge plane))) => Eq (BoundedVertexF f plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Type

Methods

(==) :: BoundedVertexF f plane -> BoundedVertexF f plane -> Bool #

(/=) :: BoundedVertexF f plane -> BoundedVertexF f plane -> Bool #

location :: NumType plane ~ r => Lens' (BoundedVertexF f plane) (Point 3 r) Source #

The location of the vertex

definers :: Lens' (BoundedVertexF f plane) (Set plane) Source #

The three planes defining the vertex

location2 :: NumType plane ~ r => Getter (BoundedVertexF f plane) (Point 2 r) Source #

Projected 2d location of the point

newtype UnboundedVertex plane Source #

The unbounded vertex.

Constructors

UnboundedVertex (Seq (LEEdge plane)) 

Instances

Instances details
Foldable UnboundedVertex Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

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

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

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

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

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

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

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

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

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

toList :: UnboundedVertex a -> [a] #

null :: UnboundedVertex a -> Bool #

length :: UnboundedVertex a -> Int #

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

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

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

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

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

Traversable UnboundedVertex Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

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

sequenceA :: Applicative f => UnboundedVertex (f a) -> f (UnboundedVertex a) #

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

sequence :: Monad m => UnboundedVertex (m a) -> m (UnboundedVertex a) #

Functor UnboundedVertex Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

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

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

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

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

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

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

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

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

unboundedVertexId :: VertexID Source #

The vertexID of the unbounded vertex

class HasUnboundedEdges t e | t -> e where Source #

Methods

unboundedEdges :: Lens' t (Seq e) Source #

Lens to access the unbounded edges.

Instances

Instances details
HasUnboundedEdges (LowerEnvelope' plane) (LEEdge plane) Source # 
Instance details

Defined in HGeometry.Plane.LowerEnvelope.Connected.Type

Methods

unboundedEdges :: Lens' (LowerEnvelope' plane) (Seq (LEEdge plane)) Source #

type EdgeGeometry point = Either (HalfLine point) (ClosedLineSegment point) Source #

Edges are either halflines or Linesegments

projectedEdgeGeometries :: (Plane_ plane r, Ord r, Fractional r, Show plane, Show r) => IndexedFold (EdgeIx (LowerEnvelope' plane)) (LowerEnvelope' plane) (EdgeGeometry (Point 2 r)) Source #

Get the projected geometries (halflines and edges line segments ) representing the edges.

projectedEdgeGeometry :: (Plane_ plane r, Ord r, Fractional r, Show plane, Show r) => LowerEnvelope' plane -> EdgeIx (LowerEnvelope' plane) -> Edge (LowerEnvelope' plane) -> EdgeGeometry (Point 2 r) Source #

Computes the (projected) LineSegment or HalfLine representing a given edge.