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

HGeometry.VoronoiDiagram.ViaLowerEnvelope

Description

Compute a Voronoi Diagram of a set of points in R^2 using the lower envelope of planes in R^3.

Synopsis

Documentation

type VoronoiDiagram point vtxData = VoronoiDiagram_ (NumType point) point vtxData Source #

A Voronoi diagram

data VoronoiDiagram_ r point vtxData Source #

Constructors

AllColinear !(Alternating Vector (VerticalOrLineEQ r) point) 
ConnectedVD !(VoronoiDiagram' (MDVertex r point vtxData) point) 

Instances

Instances details
(NFData point, NFData r, NFData vtxData, NFData (NumType point)) => NFData (VoronoiDiagram_ r point vtxData) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

Methods

rnf :: VoronoiDiagram_ r point vtxData -> () #

Generic (VoronoiDiagram_ r point vtxData) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

Associated Types

type Rep (VoronoiDiagram_ r point vtxData) 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

type Rep (VoronoiDiagram_ r point vtxData) = D1 ('MetaData "VoronoiDiagram_" "HGeometry.VoronoiDiagram.ViaLowerEnvelope" "hgeometry-1.0.0.0-inplace" 'False) (C1 ('MetaCons "AllColinear" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Alternating Vector (VerticalOrLineEQ r) point))) :+: C1 ('MetaCons "ConnectedVD" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (VoronoiDiagram' (MDVertex r point vtxData) point))))

Methods

from :: VoronoiDiagram_ r point vtxData -> Rep (VoronoiDiagram_ r point vtxData) x #

to :: Rep (VoronoiDiagram_ r point vtxData) x -> VoronoiDiagram_ r point vtxData #

(Show point, Show r, Num r, Show vtxData, Point_ point 2 r) => Show (VoronoiDiagram_ r point vtxData) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

Methods

showsPrec :: Int -> VoronoiDiagram_ r point vtxData -> ShowS #

show :: VoronoiDiagram_ r point vtxData -> String #

showList :: [VoronoiDiagram_ r point vtxData] -> ShowS #

(Eq point, Eq (NumType point), Eq r, Eq vtxData) => Eq (VoronoiDiagram_ r point vtxData) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

Methods

(==) :: VoronoiDiagram_ r point vtxData -> VoronoiDiagram_ r point vtxData -> Bool #

(/=) :: VoronoiDiagram_ r point vtxData -> VoronoiDiagram_ r point vtxData -> Bool #

type Rep (VoronoiDiagram_ r point vtxData) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

type Rep (VoronoiDiagram_ r point vtxData) = D1 ('MetaData "VoronoiDiagram_" "HGeometry.VoronoiDiagram.ViaLowerEnvelope" "hgeometry-1.0.0.0-inplace" 'False) (C1 ('MetaCons "AllColinear" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Alternating Vector (VerticalOrLineEQ r) point))) :+: C1 ('MetaCons "ConnectedVD" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (VoronoiDiagram' (MDVertex r point vtxData) point))))
type Dimension (VoronoiDiagram_ r point vtxData) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

type Dimension (VoronoiDiagram_ r point vtxData) = 2
type NumType (VoronoiDiagram_ r point vtxData) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

type NumType (VoronoiDiagram_ r point vtxData) = r

newtype VoronoiDiagram' vertex point Source #

A connected VoronoiDiagram

Constructors

VoronoiDiagram (MinimizationDiagram (NumType point) vertex point) 

Instances

Instances details
(NFData (NumType point), NFData vertex, NFData point) => NFData (VoronoiDiagram' vertex point) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

Methods

rnf :: VoronoiDiagram' vertex point -> () #

Generic (VoronoiDiagram' vertex point) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

Associated Types

type Rep (VoronoiDiagram' vertex point) 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

type Rep (VoronoiDiagram' vertex point) = D1 ('MetaData "VoronoiDiagram'" "HGeometry.VoronoiDiagram.ViaLowerEnvelope" "hgeometry-1.0.0.0-inplace" 'True) (C1 ('MetaCons "VoronoiDiagram" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (MinimizationDiagram (NumType point) vertex point))))

Methods

from :: VoronoiDiagram' vertex point -> Rep (VoronoiDiagram' vertex point) x #

to :: Rep (VoronoiDiagram' vertex point) x -> VoronoiDiagram' vertex point #

(Show point, Show vertex, Show (NumType point), Point_ point 2 (NumType point), Point_ vertex 2 (NumType point)) => Show (VoronoiDiagram' vertex point) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

Methods

showsPrec :: Int -> VoronoiDiagram' vertex point -> ShowS #

show :: VoronoiDiagram' vertex point -> String #

showList :: [VoronoiDiagram' vertex point] -> ShowS #

(Eq point, Eq vertex, Eq (NumType point)) => Eq (VoronoiDiagram' vertex point) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

Methods

(==) :: VoronoiDiagram' vertex point -> VoronoiDiagram' vertex point -> Bool #

(/=) :: VoronoiDiagram' vertex point -> VoronoiDiagram' vertex point -> Bool #

type Rep (VoronoiDiagram' vertex point) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

type Rep (VoronoiDiagram' vertex point) = D1 ('MetaData "VoronoiDiagram'" "HGeometry.VoronoiDiagram.ViaLowerEnvelope" "hgeometry-1.0.0.0-inplace" 'True) (C1 ('MetaCons "VoronoiDiagram" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (MinimizationDiagram (NumType point) vertex point))))
type Dimension (VoronoiDiagram' vertex point) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

type Dimension (VoronoiDiagram' vertex point) = 2
type NumType (VoronoiDiagram' vertex point) Source # 
Instance details

Defined in HGeometry.VoronoiDiagram.ViaLowerEnvelope

type NumType (VoronoiDiagram' vertex point) = NumType point

asMap :: (Point_ point 2 r, Ord point) => VoronoiDiagram' vertex point -> NEMap point (Region r vertex) Source #

Get, for each point, its Voronoi region

voronoiDiagram :: (Point_ point 2 r, Functor f, Ord point, Ord r, Fractional r, Foldable1 f, Show point, Show r) => f point -> VoronoiDiagram point () Source #

Computes the Voronoi Diagram, by lifting the points to planes, and computing the lower envelope of these planes.

O(n^4) ( we currently use the brute force implentation...) TODO: switch to something faster

voronoiDiagramWith :: (Point_ point 2 r, Functor nonEmpty, Ord point, Ord r, Fractional r, Foldable1 nonEmpty) => (nonEmpty (Plane r :+ point) -> LowerEnvelope (Plane r :+ point) vtxData) -> nonEmpty point -> VoronoiDiagram point vtxData Source #

Given a function to compute a lower envelope; construct use it to construct the Voronoi diagram.

voronoiDiagramWith' :: (Point_ point 2 r, Ord point, Functor set, Foldable1 set, Ord r, Fractional r, Show point, Show r) => (set (Plane r :+ point) -> VertexForm Map r (Plane r :+ point)) -> set point -> VoronoiDiagram point () Source #

Given a function that can construct the vertices of the lower envelope; use it to construct the Voronoi Diagram.

voronoiVertices :: (Point_ point 2 r, Functor f, Ord point, Ord r, Fractional r, Foldable1 f, Show point, Show r, Ord point) => f point -> Set (Point 2 r) Source #

Compute the vertices of the Voronoi diagram

pointToPlane :: (Point_ point 2 r, Num r) => point -> Plane r Source #

lifts the point to a plane; so that the lower envelope corresponds to the VD