hgeometry-0.14: Geometric Algorithms, Data structures, and Data types.
Copyright(C) Frank Staals
Licensesee the LICENSE file
MaintainerFrank Staals
Safe HaskellNone
LanguageHaskell2010

Data.PlaneGraph.IO

Description

Converting from/to Adjacency Representation of the plane graph

Synopsis

Documentation

>>> import Data.PlanarGraph.Dart
>>> import Data.PlanarGraph.AdjRep(Face(..))
>>> :{
let dart i s = Dart (Arc i) (read s)
    small :: Gr (Vtx Int String Int) (Face String)
    small = Gr [ Vtx 0 (Point2 0 0) [ (2,"0->2")
                                    , (1,"0->1")
                                    , (3,"0->3")
                                    ] 0
               , Vtx 1 (Point2 2 2) [ (0,"1->0")
                                    , (2,"1->2")
                                    , (3,"1->3")
                                    ] 1
               , Vtx 2 (Point2 2 0) [ (0,"2->0")
                                    , (1,"2->1")
                                    ] 2
               , Vtx 3 (Point2 (-1) 4) [ (0,"3->0")
                                       , (1,"3->1")
                                       ] 3
               ]
               [ Face (2,1) "OuterFace"
               , Face (0,1) "A"
               , Face (1,0) "B"
               ]
    smallG = fromAdjRep @() small
:}

This represents the following graph. Note that the graph is undirected, the arrows are just to indicate what the Positive direction of the darts is.

Reading and Writing the Plane Graph

readPlaneGraph :: forall s v e f r. (FromJSON v, FromJSON e, FromJSON f, FromJSON r) => ByteString -> Either ParseException (PlaneGraph s v e f r) Source #

Reads a plane graph from a bytestring

writePlaneGraph :: (ToJSON v, ToJSON e, ToJSON f, ToJSON r) => PlaneGraph s v e f r -> ByteString Source #

Writes a plane graph to a bytestring

toAdjRep :: PlaneGraph s v e f r -> Gr (Vtx v e r) (Face f) Source #

Transforms the plane graph into adjacency lists. For every vertex, the adjacent vertices are given in counter clockwise order.

See toAdjacencyLists for notes on how we handle self-loops.

running time: \(O(n)\)

fromAdjRep :: forall s v e f r. Gr (Vtx v e r) (Face f) -> PlaneGraph s v e f r Source #

Given the AdjacencyList representation of a plane graph, construct the plane graph representing it. All the adjacencylists should be in counter clockwise order.

running time: \(O(n)\)

makeCCW :: (Num r, Ord r) => Gr (Vtx v e r) f -> Gr (Vtx v e r) f Source #

Orders the adjacencylists of a plane graph (with \(n\) vertices) (in Adj repr) so that they are all counter-clockwise around the vertices.

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

Orphan instances

(ToJSON v, ToJSON e, ToJSON f, ToJSON r) => ToJSON (PlaneGraph s v e f r) Source # 
Instance details

Methods

toJSON :: PlaneGraph s v e f r -> Value #

toEncoding :: PlaneGraph s v e f r -> Encoding #

toJSONList :: [PlaneGraph s v e f r] -> Value #

toEncodingList :: [PlaneGraph s v e f r] -> Encoding #

(FromJSON v, FromJSON e, FromJSON f, FromJSON r) => FromJSON (PlaneGraph s v e f r) Source # 
Instance details

Methods

parseJSON :: Value -> Parser (PlaneGraph s v e f r) #

parseJSONList :: Value -> Parser [PlaneGraph s v e f r] #