mirror of https://github.com/CGAL/cgal
Reorganize User Manual
This commit is contained in:
parent
0f06b0aa43
commit
42014bd81c
|
|
@ -70,7 +70,44 @@ Invalid: (a) self-intersecting polygon self-intersection, (b) self-touching poly
|
||||||
with overlapping polygons, and (h) multipolygon with polygons that touch at an edge.
|
with overlapping polygons, and (h) multipolygon with polygons that touch at an edge.
|
||||||
\cgalFigureEnd
|
\cgalFigureEnd
|
||||||
|
|
||||||
\subsection SubsectionPolygonRepair_Output Stricter Conditions for Output
|
|
||||||
|
\section SectionPolygonRepair_EvenOdd Even-Odd and Non-Zero Rule
|
||||||
|
|
||||||
|
While the even-odd rule switches between inside/outside at each edge only taking
|
||||||
|
into account multiplicity, the non-zero rule takes also into account
|
||||||
|
the orientation of the edge.
|
||||||
|
|
||||||
|
This leads to different results as can be seen in the figure below.
|
||||||
|
|
||||||
|
\cgalFigureBegin{WindingNonZeroDifferent, WindingNonZeroDifferent.svg}
|
||||||
|
Input (left), non-zero (middle) even-odd (right).
|
||||||
|
\cgalFigureEnd
|
||||||
|
|
||||||
|
And there are other configurations where the two rules lead to the same result.
|
||||||
|
|
||||||
|
\cgalFigureBegin{WindingNonZero, WindingNonZero.svg}
|
||||||
|
Input (left), non-zero and even-odd (right).
|
||||||
|
\cgalFigureEnd
|
||||||
|
|
||||||
|
A valid polygon with holes, obviously has the same result with both rules applied
|
||||||
|
as it is just the identity. However an invalid multipolygon with one polygon
|
||||||
|
enclosing the other one results in a polygon with hole.
|
||||||
|
|
||||||
|
\cgalFigureBegin{MultipolygonHole, MultipolygonHole.svg}
|
||||||
|
Input (left), non-zero (middle) even-odd (right).
|
||||||
|
\cgalFigureEnd
|
||||||
|
|
||||||
|
\section SectionPolygonRepair_UnionIntersection Union and Intersection Rule
|
||||||
|
|
||||||
|
Given several valid polygons this rule computes their union or intersection.
|
||||||
|
|
||||||
|
\cgalFigureBegin{UnionIntersection, UnionIntersection.svg}
|
||||||
|
Union (top) and Intersection (bottom).
|
||||||
|
\cgalFigureEnd
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\subsection SubsectionPolygonRepair_Output Notes on the Output
|
||||||
|
|
||||||
The conditions listed above are sufficient to define valid polygons, polygons
|
The conditions listed above are sufficient to define valid polygons, polygons
|
||||||
with holes and multipolygons with holes for most applications. However, in
|
with holes and multipolygons with holes for most applications. However, in
|
||||||
|
|
@ -88,24 +125,6 @@ order
|
||||||
- The polygons with holes of a multipolygon with holes are also stored in
|
- The polygons with holes of a multipolygon with holes are also stored in
|
||||||
lexicographic order
|
lexicographic order
|
||||||
|
|
||||||
\section SectionPolygonRepair_EvenOdd Even-Odd Rule
|
|
||||||
|
|
||||||
|
|
||||||
\cgalFigureBegin{inout, inout.svg}
|
|
||||||
Examples of polygons with holes (a-d) and multipolygons with holes
|
|
||||||
(e-h) before (left) and after (right) being repaired with the even-odd rule.
|
|
||||||
\cgalFigureEnd
|
|
||||||
|
|
||||||
|
|
||||||
\section SectionPolygonRepair_NonZero Non-Zero Rule
|
|
||||||
|
|
||||||
Tbd.
|
|
||||||
|
|
||||||
\section SectionPolygonRepair_UnionIntersection Union and Intersection Rule
|
|
||||||
|
|
||||||
Given several valid polygons this rule computes their union or intersection.
|
|
||||||
|
|
||||||
\section SubsectionPolygonRepair_Notes Notes on the Output
|
|
||||||
|
|
||||||
If the input is already valid, the method will return a valid output representing
|
If the input is already valid, the method will return a valid output representing
|
||||||
the same area. However, the output might be different in order to conform to the
|
the same area. However, the output might be different in order to conform to the
|
||||||
|
|
@ -118,54 +137,6 @@ the repair function will always return a multipolygon with holes. The user can
|
||||||
then check whether it consists of a single polygon with holes, and if a polygon
|
then check whether it consists of a single polygon with holes, and if a polygon
|
||||||
with holes has zero holes and extract these if needed.
|
with holes has zero holes and extract these if needed.
|
||||||
|
|
||||||
\section SectionPolygonRepair_Algorithm Implementation
|
|
||||||
|
|
||||||
Broadly, the algorithm consists of three steps:
|
|
||||||
|
|
||||||
-# <em>Arrangement</em>: the edges in the polygon, polygon with
|
|
||||||
holes or multipolygon with holes are added as edges in the arrangement.
|
|
||||||
-# <em>Labeling of the faces</em>: the resulting faces are labeled with ids
|
|
||||||
according to what they represent (exterior, polygon interior or hole).
|
|
||||||
-# <em>Reconstruction of the multipolygon</em>: each boundary is reconstructed,
|
|
||||||
then these are assembled into individual polygons with holes and put into a
|
|
||||||
single multipolygon with holes.
|
|
||||||
|
|
||||||
|
|
||||||
\subsection SubsectionPolygonRepair_Arrangement Arrangement
|
|
||||||
|
|
||||||
For the purposes of the repair operation, the input polygon, polygon with holes
|
|
||||||
or multipolygon is merely used as a container of input line segments. These line
|
|
||||||
segments are added to the arrangement as edges. Internally, this is done using
|
|
||||||
a constrained triangulation where they are added as constraints.
|
|
||||||
|
|
||||||
With the even-odd rule, only the edges that are present an odd number of
|
|
||||||
times in the input will be edges in the final arrangement.
|
|
||||||
When these edges are only partially overlapping, only the parts that overlap
|
|
||||||
an odd number of times will be edges in the final arrangement.
|
|
||||||
|
|
||||||
This procedure is done in two steps: 1. preprocessing to eliminate identical
|
|
||||||
edges that are present an even number of times, and 2. adding edges incrementally
|
|
||||||
while applying an even-odd counting mechanism, which erases existing (parts of)
|
|
||||||
edges when new overlapping ones are added.
|
|
||||||
|
|
||||||
\subsection SubsectionPolygonRepair_Labeling Labeling
|
|
||||||
|
|
||||||
First, the polygon exterior is labeled. For this, all of the faces that can be
|
|
||||||
accessed from the exterior without passing through an edge are labeled as exterior
|
|
||||||
faces.
|
|
||||||
|
|
||||||
Then, all other faces are labeled. For the even-odd rule, the label applied
|
|
||||||
alternates between polygon interior and hole every time that an edge is passed.
|
|
||||||
|
|
||||||
\subsection SubsectionPolygonRepair_Reconstruction Reconstruction of the Multipolygon
|
|
||||||
|
|
||||||
The algorithm reconstructs the multipolygon boundary by boundary, obtaining
|
|
||||||
counter-clockwise cycles for outer boundaries and clockwise cycles for inner
|
|
||||||
boundaries. Once all boundaries have been reconstructed, the boundaries are assembled
|
|
||||||
into multipolygons using the face labels to know which polygon with holes inner/outer
|
|
||||||
boundaries belong to, and using the orientation to distinguish between the outer and
|
|
||||||
inner boundaries of each polygon with holes.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\section SectionPolygonRepair_Examples Examples
|
\section SectionPolygonRepair_Examples Examples
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue