|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r78414 - in trunk/libs/polygon/doc: . images
From: sydorchuk.andriy_at_[hidden]
Date: 2012-05-10 17:45:18
Author: asydorchuk
Date: 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
New Revision: 78414
URL: http://svn.boost.org/trac/boost/changeset/78414
Log:
Polygon: updating documentation.
Added:
trunk/libs/polygon/doc/gtl_segment_concept.htm (contents, props changed)
trunk/libs/polygon/doc/images/rover.jpg (contents, props changed)
trunk/libs/polygon/doc/images/vlsi.jpg (contents, props changed)
trunk/libs/polygon/doc/images/voronoi.png (contents, props changed)
trunk/libs/polygon/doc/images/voronoi2.png (contents, props changed)
trunk/libs/polygon/doc/images/voronoi3.png (contents, props changed)
trunk/libs/polygon/doc/images/voronoi4.png (contents, props changed)
trunk/libs/polygon/doc/voronoi_advanced_tutorial.htm (contents, props changed)
trunk/libs/polygon/doc/voronoi_basic_tutorial.htm (contents, props changed)
trunk/libs/polygon/doc/voronoi_benchmark.htm (contents, props changed)
trunk/libs/polygon/doc/voronoi_builder.htm (contents, props changed)
trunk/libs/polygon/doc/voronoi_diagram.htm (contents, props changed)
trunk/libs/polygon/doc/voronoi_main.htm (contents, props changed)
trunk/libs/polygon/doc/voronoi_predicates.htm (contents, props changed)
trunk/libs/polygon/doc/voronoi_robust_fpt.htm (contents, props changed)
trunk/libs/polygon/doc/voronoi_utils.htm (contents, props changed)
Text files modified:
trunk/libs/polygon/doc/analysis.htm | 127 +++++++-----
trunk/libs/polygon/doc/gtl_connectivity_extraction.htm | 84 +++++---
trunk/libs/polygon/doc/gtl_connectivity_extraction_45.htm | 84 +++++---
trunk/libs/polygon/doc/gtl_connectivity_extraction_90.htm | 84 +++++---
trunk/libs/polygon/doc/gtl_coordinate_concept.htm | 113 ++++++----
trunk/libs/polygon/doc/gtl_design_overview.htm | 55 +++-
trunk/libs/polygon/doc/gtl_interval_concept.htm | 254 ++++++++++++++------------
trunk/libs/polygon/doc/gtl_isotropy.htm | 126 +++++++-----
trunk/libs/polygon/doc/gtl_minkowski_tutorial.htm | 5
trunk/libs/polygon/doc/gtl_point_concept.htm | 206 +++++++++++---------
trunk/libs/polygon/doc/gtl_polygon_45_concept.htm | 201 +++++++++++---------
trunk/libs/polygon/doc/gtl_polygon_45_set_concept.htm | 236 +++++++++++++-----------
trunk/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm | 189 ++++++++++---------
trunk/libs/polygon/doc/gtl_polygon_90_concept.htm | 187 ++++++++++--------
trunk/libs/polygon/doc/gtl_polygon_90_set_concept.htm | 349 +++++++++++++++++++-----------------
trunk/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm | 193 ++++++++++---------
trunk/libs/polygon/doc/gtl_polygon_concept.htm | 203 +++++++++++---------
trunk/libs/polygon/doc/gtl_polygon_set_concept.htm | 242 +++++++++++++-----------
trunk/libs/polygon/doc/gtl_polygon_with_holes_concept.htm | 193 ++++++++++---------
trunk/libs/polygon/doc/gtl_property_merge.htm | 86 +++++---
trunk/libs/polygon/doc/gtl_property_merge_45.htm | 86 +++++---
trunk/libs/polygon/doc/gtl_property_merge_90.htm | 86 +++++---
trunk/libs/polygon/doc/gtl_rectangle_concept.htm | 382 ++++++++++++++++++++-------------------
trunk/libs/polygon/doc/index.htm | 201 +++++++++++++-------
24 files changed, 2204 insertions(+), 1768 deletions(-)
Modified: trunk/libs/polygon/doc/analysis.htm
==============================================================================
--- trunk/libs/polygon/doc/analysis.htm (original)
+++ trunk/libs/polygon/doc/analysis.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,64 +1,85 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
+<!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Performance Analysis</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Performance Analysis</title>
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
<h3 class="navbar">Contents</h3>
<ul>
- <li>Boost.Polygon Main Page</li>
- <li><a href="gtl_design_overview.htm">Polygon
- Library Design Overview</a></li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>
- Point Concept</li>
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
- </ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li>Voronoi Main Page
+ </li>
+ <li>Voronoi Benchmark</li>
+ <li>Voronoi Builder<br />
+ </li>
+ <li>Voronoi Diagram</li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon Set Algorithms Analysis</h1>
<p>Most non-trivial algorithms in the Boost.Polygon library are
@@ -86,25 +107,25 @@
constant factor of input vertices we can examine runtime complexity in terms of
input vertices. The operation performed was a union (Boolean OR) of the
input rectangles by each of the Manhattan, 45-degree and arbitrary angle
-Booleans algorithms, which are labeled "boolean 90", "boolean 45" and "boolean".
+Booleans algorithms, which are labeled "boolean 90", "boolean 45" and "boolean".
Also shown in the plot is the performance of the arbitrary angle Booleans
algorithm as prior to the addition of divide and conquer recursive subdivision,
which was described in the paper
<a href="GTL_boostcon_draft03.pdf">presented</a> at
<a href="http://www.boostcon.com/home">boostcon</a> 2009. Finally, the
time required to sort the input points is shown as a common reference for O(n log n)
-runtime to put the data into context.</p><img border="0" src="images/perf_graph.PNG" width="391" height="414"><p>
+runtime to put the data into context.</p><img src="images/perf_graph.PNG" border="0" height="414" width="391" /><p>
We can see in the log-log plot that sorting and the three Booleans algorithms
-provided by the Boost.Polygon library have nearly 45 degree "linear"
+provided by the Boost.Polygon library have nearly 45 degree "linear"
scaling with empirical exponents just slightly larger than 1.0 and can be
observed to scale proportional to O(n log n) for
-these inputs. The "old boolean" algorithm presented at boostcon 2009
+these inputs. The "old boolean" algorithm presented at boostcon 2009
exhibits scaling close to the expected O(n<sup><font size="2">1.5</font></sup>)
scaling. Because the speedup provided by the divide and conquer approach
is algorithmic, the 10X potential performance improvement alluded to in the paper is
realized at inputs of 200,000 rectangles and larger. Even for small inputs
of 2K rectangles the algorithm is 2X faster and now can be expected to be
-roughly as fast as GPC at small scales,
+roughly as fast as GPC at small scales,
while algorithmically faster at large scales.</p>
<p>
@@ -116,10 +137,10 @@
work, 45-degree Booleans cost roughly
-</body>ten units of O(n log n) work and arbitrary angle Booleans cost roughly
+ten units of O(n log n) work and arbitrary angle Booleans cost roughly
seventy units of O(n log n) work. Sorting the input vertices is the first
step in a Booleans algorithm and therefore provides a hard lower bound for the
-runtime of an optimal Booleans algorithm.<p>
+runtime of an optimal Booleans algorithm.</p><p>
One final thing to note about performance of the arbitrary angle Booleans
@@ -137,17 +158,17 @@
intersection point within one integer unit of both line segments. This
means that there is effectively no runtime penalty for the use of infinite
precision to ensure 100% robustness. Most inputs will process through the
-algorithm without ever resorting to GMP.<tr>
+algorithm without ever resorting to GMP.</p></td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table1">
+<table class="docinfo" id="table1" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -160,6 +181,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_connectivity_extraction.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_connectivity_extraction.htm (original)
+++ trunk/libs/polygon/doc/gtl_connectivity_extraction.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Connectivity Extraction 45</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Connectivity Extraction 45</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,32 +39,47 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Connectivity Extraction</h1>
<p>
-<p>The connectivity extraction algorithm constructs the connectivity graph where
+</p><p>The connectivity extraction algorithm constructs the connectivity graph where
input polygon sets are modeled as graph nodes and assigned node ids and
overlap/touching between input polygon sets is modeled as graph edges. One
supported graph formats is std::vector<std::set<int> > where node ids index into
@@ -71,33 +89,33 @@
the operator[] is used internally to access the graph The other
supported graph format is std::map<int, std::set<int> > which is slightly easier to
work with, but potentially more expensive. Improving the interface to
-support more generic graph concepts is deferred to future work.<p>The following
-is the declaration of the connectivity extraction algorithm.<p>
-<font face="Courier New">template <typename coordinate_type><br>
-class connectivity_extraction;</font><p>
+support more generic graph concepts is deferred to future work.</p><p>The following
+is the declaration of the connectivity extraction algorithm.</p><p>
+<font face="Courier New">template <typename coordinate_type><br />
+class connectivity_extraction;</font></p><p>
Example code connectivity_extraction_usage.cpp
demonstrates using the connectivity extraction algorithm to build a
-connectivity graph on geometry.<h2>Member Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
+connectivity graph on geometry.</p><h2>Member Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">connectivity_extraction</font></b><font face="Courier New">()</font></td>
<td>Default constructor. </td>
</tr>
<tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction</font></b><font face="Courier New">(<br> const
+ <td width="586"><b><font face="Courier New">connectivity_extraction</font></b><font face="Courier New">(<br /> const
connectivity_extraction& that)</font></td>
<td>Copy construct.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">unsigned int <br><b>insert</b>(const polygon_set_data<coordinate_type>& ps)</font></td>
+<font face="Courier New">unsigned int <br /><b>insert</b>(const polygon_set_data<coordinate_type>& ps)</font></td>
<td>I<font face="Times New Roman">nsert a polygon set graph node, the
value returned is the id of the graph node.</font></td>
</tr>
<tr>
<td width="586">
<font face="Courier New">
-template <class GeoObjT><br>
+template <class GeoObjT><br />
unsigned int <b>insert</b>(const GeoObjT& geoObj)</font></td>
<td>Insert a geometry object that is a refinement of polygon set as a
graph node, the return value is the id of the graph node.</td>
@@ -105,24 +123,24 @@
<tr>
<td width="586">
<font face="Courier New">
-template <class GraphT><br>
+template <class GraphT><br />
void <b>extract</b>(GraphT& graph)</font></td>
<td>Accepts a graph object that conforms to the expectations defined
above. Performs connectivity extraction and populates the graph
object.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table2">
+<table class="docinfo" id="table2" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -135,6 +153,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_connectivity_extraction_45.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_connectivity_extraction_45.htm (original)
+++ trunk/libs/polygon/doc/gtl_connectivity_extraction_45.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Connectivity Extraction 45</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Connectivity Extraction 45</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,32 +39,47 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Connectivity Extraction 45</h1>
<p>
-<p>The connectivity extraction algorithm constructs the connectivity graph where
+</p><p>The connectivity extraction algorithm constructs the connectivity graph where
input polygon sets are modeled as graph nodes and assigned node ids and
overlap/touching between input polygon sets is modeled as graph edges. One
supported graph formats is std::vector<std::set<int> > where node ids index into
@@ -71,33 +89,33 @@
the operator[] is used internally to access the graph The other
supported graph format is std::map<int, std::set<int> > which is slightly easier to
work with, but potentially more expensive. Improving the interface to
-support more generic graph concepts is deferred to future work.<p>The following
-is the declaration of the connectivity extraction algorithm.<p>
-<font face="Courier New">template <typename coordinate_type><br>
-class connectivity_extraction_45;</font><p>
+support more generic graph concepts is deferred to future work.</p><p>The following
+is the declaration of the connectivity extraction algorithm.</p><p>
+<font face="Courier New">template <typename coordinate_type><br />
+class connectivity_extraction_45;</font></p><p>
Example code connectivity_extraction_usage.cpp
demonstrates using the connectivity extraction algorithm to build a
-connectivity graph on geometry.<h2>Member Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
+connectivity graph on geometry.</p><h2>Member Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">connectivity_extraction_45</font></b><font face="Courier New">()</font></td>
<td>Default constructor. </td>
</tr>
<tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction_45</font></b><font face="Courier New">(<br> const
+ <td width="586"><b><font face="Courier New">connectivity_extraction_45</font></b><font face="Courier New">(<br /> const
connectivity_extraction_45& that)</font></td>
<td>Copy construct.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">unsigned int <br><b>insert</b>(const polygon_45_set_data<coordinate_type>& ps)</font></td>
+<font face="Courier New">unsigned int <br /><b>insert</b>(const polygon_45_set_data<coordinate_type>& ps)</font></td>
<td>I<font face="Times New Roman">nsert a polygon set graph node, the
value returned is the id of the graph node.</font></td>
</tr>
<tr>
<td width="586">
<font face="Courier New">
-template <class GeoObjT><br>
+template <class GeoObjT><br />
unsigned int <b>insert</b>(const GeoObjT& geoObj)</font></td>
<td>Insert a geometry object that is a refinement of polygon 45 set as a
graph node, the return value is the id of the graph node.</td>
@@ -105,24 +123,24 @@
<tr>
<td width="586">
<font face="Courier New">
-template <class GraphT><br>
+template <class GraphT><br />
void <b>extract</b>(GraphT& graph)</font></td>
<td>Accepts a graph object that conforms to the expectations defined
above. Performs connectivity extraction and populates the graph
object.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table2">
+<table class="docinfo" id="table2" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -135,6 +153,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_connectivity_extraction_90.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_connectivity_extraction_90.htm (original)
+++ trunk/libs/polygon/doc/gtl_connectivity_extraction_90.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Connectivity Extraction 90</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Connectivity Extraction 90</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,32 +39,47 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Connectivity Extraction 90</h1>
<p>
-<p>The connectivity extraction algorithm constructs the connectivity graph where
+</p><p>The connectivity extraction algorithm constructs the connectivity graph where
input polygon sets are modeled as graph nodes and assigned node ids and
overlap/touching between input polygon sets is modeled as graph edges. One
supported graph formats is std::vector<std::set<int> > where node ids index into
@@ -71,33 +89,33 @@
the operator[] is used internally to access the graph The other
supported graph format is std::map<int, std::set<int> > which is slightly easier to
work with, but potentially more expensive. Improving the interface to
-support more generic graph concepts is deferred to future work.<p>The following
-is the declaration of the connectivity extraction algorithm.<p>
-<font face="Courier New">template <typename coordinate_type><br>
-class connectivity_extraction_90;</font><p>
+support more generic graph concepts is deferred to future work.</p><p>The following
+is the declaration of the connectivity extraction algorithm.</p><p>
+<font face="Courier New">template <typename coordinate_type><br />
+class connectivity_extraction_90;</font></p><p>
Example code connectivity_extraction_usage.cpp
demonstrates using the connectivity extraction algorithm to build a
-connectivity graph on geometry.<h2>Member Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
+connectivity graph on geometry.</p><h2>Member Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">connectivity_extraction_90</font></b><font face="Courier New">()</font></td>
<td>Default constructor. </td>
</tr>
<tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction_90</font></b><font face="Courier New">(<br> const
+ <td width="586"><b><font face="Courier New">connectivity_extraction_90</font></b><font face="Courier New">(<br /> const
connectivity_extraction_90& that)</font></td>
<td>Copy construct.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">unsigned int <br><b>insert</b>(const polygon_90_set_data<coordinate_type>& ps)</font></td>
+<font face="Courier New">unsigned int <br /><b>insert</b>(const polygon_90_set_data<coordinate_type>& ps)</font></td>
<td>I<font face="Times New Roman">nsert a polygon set graph node, the
value returned is the id of the graph node.</font></td>
</tr>
<tr>
<td width="586">
<font face="Courier New">
-template <class GeoObjT><br>
+template <class GeoObjT><br />
unsigned int <b>insert</b>(const GeoObjT& geoObj)</font></td>
<td>Insert a geometry object that is a refinement of polygon 90 set as a
graph node, the return value is the id of the graph node.</td>
@@ -105,24 +123,24 @@
<tr>
<td width="586">
<font face="Courier New">
-template <class GraphT><br>
+template <class GraphT><br />
void <b>extract</b>(GraphT& graph)</font></td>
<td>Accepts a graph object that conforms to the expectations defined
above. Performs connectivity extraction and populates the graph
object.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table2">
+<table class="docinfo" id="table2" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -135,6 +153,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_coordinate_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_coordinate_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_coordinate_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Coordinate Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Coordinate Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +22,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,56 +40,71 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Coordinate Concept</h1>
<p>
The coordinate concept tag is <font face="Courier New">
-coordinate_concept</font><p>
+coordinate_concept</font></p><p>
To register a user defined type as a model of coordinate concept, specialize the
geometry concept meta-function for that type. In the example below
-CCoordinate is registered as a model of coordinate concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CCoordinate> { typedef coordinate_concept type; };</font><p>
+CCoordinate is registered as a model of coordinate concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CCoordinate> { typedef coordinate_concept type; };</font></p><p>
The coordinate type is expected to be integral and built-in numerical data types
such as float and int already have concept type traits specializations in the
library. In the coordinate traits are type definitions for related types
are provided to allow the library to choose the best type to cast to under
various circumstances. The definition of coordinate_traits and its
-specialization for int are shown below.<p>
-<font face="Courier New">template <typename T><br>
-struct coordinate_traits {};<br>
-<br>
-template <><br>
-struct coordinate_traits<int> {<br>
- typedef int coordinate_type;<br>
- typedef long double area_type;<br>
- typedef long long manhattan_area_type;<br>
- typedef unsigned long long unsigned_area_type;<br>
- typedef long long coordinate_difference;<br>
- typedef long double coordinate_distance;<br>
-};</font><p>
+specialization for int are shown below.</p><p>
+<font face="Courier New">template <typename T><br />
+struct coordinate_traits {};<br />
+<br />
+template <><br />
+struct coordinate_traits<int> {<br />
+ typedef int coordinate_type;<br />
+ typedef long double area_type;<br />
+ typedef long long manhattan_area_type;<br />
+ typedef unsigned long long unsigned_area_type;<br />
+ typedef long long coordinate_difference;<br />
+ typedef long double coordinate_distance;<br />
+};</font></p><p>
By making use of the coordinate traits of int the library is able to avoid
overflow and handle the normal issues encountered when programming integer
geometry. For the out of the ordinary issues there is a special
@@ -94,37 +113,37 @@
available in most compilers, long double, but can be overridden by specializing
for a particular coordinate type. Use of gmp multi-precision rational or
similar data type is recommended for numerically robust calculations in the
-general polygon algorithms.<p>
-<font face="Courier New">template <typename T><br>
-struct high_precision_type {<br>
- typedef long double type;<br>
-};</font><p>
-There is only one generic function on coordinate concepts, Euclidean distance.<p>
+general polygon algorithms.</p><p>
+<font face="Courier New">template <typename T><br />
+struct high_precision_type {<br />
+ typedef long double type;<br />
+};</font></p><p>
+There is only one generic function on coordinate concepts, Euclidean distance.</p><p>
<font face="Courier New">template <typename coordinate_type_1, typename
-coordinate_type_2><br>
-coordinate_difference euclidean_distance(coordinate_type_1, coordinate_type_2)</font><p>
+coordinate_type_2><br />
+coordinate_difference euclidean_distance(coordinate_type_1, coordinate_type_2)</font></p><p>
This function returns the absolution value of the difference between the two
-coordinates.<p>
+coordinates.</p><p>
Note: older versions of the stl define a fully generic distance(T, T) function
for computing the difference between two iterators. We were forced to name
-our distance function euclidean_distance to avoid name collision.<p>
+our distance function euclidean_distance to avoid name collision.</p><p>
The
<a href="http://www.mentor.com/products/esl/high_level_synthesis/ac_datatypes">
Algorithmic C</a> ac_int<128> is an example of a user defined coordinate data
type that satisfies the coordinate concept. In general a data type should
define std::numeric_limits and be integer-like. Floating point coordinate
types are not supported by all the algorithms and generally not suitable for use
-with the library at present.<tr>
+with the library at present.</p></td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table1">
+<table class="docinfo" id="table1" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -137,6 +156,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_design_overview.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_design_overview.htm (original)
+++ trunk/libs/polygon/doc/gtl_design_overview.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Overview</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Overview</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -21,6 +22,8 @@
<li>Interval Concept</li>
<li>
<a href="gtl_point_concept.htm">Point Concept</a></li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -37,6 +40,18 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
@@ -46,23 +61,27 @@
<li>Performance Analysis</li>
<li>Layout Versus Schematic Tutorial</li>
<li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+
</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon Library Design Overview</h1>
<p>
-<p>The Polygon library uses C++-Concepts inspired template programming to
+</p><p>The Polygon library uses C++-Concepts inspired template programming to
provide generic library functions overloaded on concept type. There are
currently thirteen concepts in the Polygon library type system. A concept
object in the Polygon library is just an empty struct similar to a tag that
@@ -70,7 +89,7 @@
refinement diagram below.</p>
-</body><img border="0" src="images/refinements.png" width="466" height="369"><p>
+<img src="images/refinements.png" border="0" height="369" width="466" /><p>
The arrows between diagram bubbles show concept refinement relationships. This is
similar, but not identical to, inheritance relationships between normal classes.
A refinement of a concept narrows down the definition of a more general concept.
@@ -123,7 +142,7 @@
as that conceptual type with the library by
specializing the geometry_concept meta-function. Once mapped and
registered, a user data type can be used interchangeably with library data types
-in the generic free functions that are overloaded on concept.<p>Traits for
+in the generic free functions that are overloaded on concept.</p><p>Traits for
mapping a data type to a concept are broken down into mutable and read only
traits. Read only traits are specialized internally to work with any types
that are refinements of a concept. The mutable traits are defined only for
@@ -135,7 +154,7 @@
traits defined for that triangle type. This would allow the triangle type
to be passed into any API that expects a const reference to an object that models
polygon.
-<p>An object that is a model of a given concept can usually be viewed as a model of any of its
+</p><p>An object that is a model of a given concept can usually be viewed as a model of any of its
refinements if it is determined at runtime to conform to the restrictions of
those concepts. This concept casting is accomplished through the
<font face="Courier New">view_as<>()</font> function. For example if
@@ -146,17 +165,17 @@
passed into any interface that expects an object of the conceptual type
specified in its template parameter. The exception to this ability to
concept cast geometric objects is that polygon set objects cannot be viewed as
-individual polygons or rectangles.</p> <tr>
+individual polygons or rectangles.</p> </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table1">
+<table class="docinfo" id="table1" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -169,6 +188,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_interval_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_interval_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_interval_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Interval Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Interval Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,6 +39,18 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
@@ -45,30 +60,34 @@
<li>Performance Analysis</li>
<li>Layout Versus Schematic Tutorial</li>
<li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+
</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Interval Concept</h1>
<p>
-<p>The interval concept tag is <font face="Courier New">
+</p><p>The interval concept tag is <font face="Courier New">
interval_concept</font></p>
<p>
To register a user defined type as a model of interval concept, specialize the
geometry concept meta-function for that type. In the example below
-CInterval is registered as a model of interval concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CInterval> { typedef interval_concept type; };</font><p>
+CInterval is registered as a model of interval concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CInterval> { typedef interval_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of an interval is that it has a low
and high coordinate and there is an invariant that low is less than or equal to
high. This invariant is enforced by the generic library functions that
@@ -76,50 +95,51 @@
mapping of that data type to the interval concept through its traits. In
this way a std::pair<int, int>, boost::tuple<int, int> or boost::array<int, 2>
could all be made models of interval by simply providing indirect access to their
-elements through traits.</font><p>
+elements through traits.</font></p><p>
<font face="Times New Roman">Below is shown the default interval traits.
Specialization of these traits is required for types that don't conform to the
-default behavior.</font><p>
-<font face="Courier New">template <typename T><br>
-struct interval_traits {<br>
- typedef typename T::coordinate_type coordinate_type;<br>
-<br>
- static inline coordinate_type get(const T& interval, direction_1d dir) {<br>
- return interval.get(dir); <br>
- }<br>
-};<br>
-<br>
-template <typename T><br>
-struct interval_mutable_traits {<br>
+default behavior.</font></p><p>
+<font face="Courier New">template <typename T><br />
+struct interval_traits {<br />
+ typedef typename T::coordinate_type coordinate_type;<br />
+<br />
+ static inline coordinate_type get(const T& interval, direction_1d dir) {<br />
+ return interval.get(dir); <br />
+ }<br />
+};<br />
+<br />
+template <typename T><br />
+struct interval_mutable_traits {<br />
static inline void set(T& interval, direction_1d dir, </font>
-<br>
-<font face="Courier New"> typename interval_traits<T>::coordinate_type value) {<br>
+<br />
+<font face="Courier New">
+typename interval_traits<T>::coordinate_type value) {<br />
-interval.set(dir, value); <br>
+interval.set(dir, value); <br />
-}<br>
+}<br />
static inline T construct(typename interval_traits<T>::coordinate_type low_value,
-<br>
+<br />
-typename interval_traits<T>::coordinate_type high_value) {<br>
+typename interval_traits<T>::coordinate_type high_value) {<br />
-return T(low_value, high_value); <br>
+return T(low_value, high_value); <br />
-}<br>
-};</font><h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+}<br />
+};</font></p><h2>Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_type <b>get</b>(const T& interval, direction_1d)</font></td>
<td><font face="Times New Roman">Expects a model of interval.
Returns the low or high coordinate of the interval, depending on the
- direction_1d value.</font><font face="Courier New"><br>
+ direction_1d value.</font><font face="Courier New"><br />
</font></td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- coordinate_type><br>
+ coordinate_type><br />
void <b>set</b>(T& interval, direction_1d, coordinate_type)</font></td>
<td><font face="Times New Roman">Expects a model of interval.
Sets the low or high coordinate of the interval to the coordinate,
@@ -127,28 +147,28 @@
high after this change then both are set to the input coordinate value.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T <b>construct</b>(coordinate_type low, coordinate_type high)</font></td>
<td>Construct an object that is a model of interval given low and high
coordinate values.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models interval into left object
that models interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- T2><br>
+ T2><br />
bool <b>equivalence</b>(const T& interval1, const T2& interval2)</font></td>
<td>Given two objects that model interval, compares and returns true if
their low and high values are respectively equal to each other.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- bool <b>contains</b>(const T&, coordinate_type, <br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ bool <b>contains</b>(const T&, coordinate_type, <br />
bool consider_touch=true)</font></td>
<td>Given an object that models interval and a coordinate, returns true
@@ -158,8 +178,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>contains</b>(const T1& a, const T2& b, <br>
+ T2><br />
+ bool <b>contains</b>(const T1& a, const T2& b, <br />
bool consider_touch = true) </font></td>
<td>Returns true if model of interval a contains both ends of model of
@@ -168,25 +188,25 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
+ interval_type><br />
coordinate_type <b>low</b>(const interval_type& interval)</font></td>
<td>Returns the low end of an object that models interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
+ interval_type><br />
coordinate_type <b>high</b>(const interval_type& interval)</font></td>
<td>Returns the high end of an object that models interval.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br>
- template <typename interval_type><br>
+ <td width="586"><font face="Courier New">// get the center coordinate<br />
+ template <typename interval_type><br />
coordinate_type <b>center</b>(const interval_type& interval)</font></td>
<td>Returns the center coordinate of an object that models interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
+ interval_type><br />
void <b>low</b>(interval_type& interval, coordinate_type )</font></td>
<td>Sets the low end of the object that models interval to the
coordinate value. If the low end would be set to larger than high
@@ -194,7 +214,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
+ interval_type><br />
void <b>high</b>(interval_type& interval, coordinate_type )</font></td>
<td>Sets the high end of the object that models interval to the
coordinate value. If the high end would be set to less than low
@@ -202,15 +222,15 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
+ interval_type><br />
coordinate_difference <b>delta</b>(const interval_type& interval)</font></td>
<td>Returns the distance from low to high end of an object that models
interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
- interval_type& <b>flip</b>(interval_type& interval,<br>
+ interval_type><br />
+ interval_type& <b>flip</b>(interval_type& interval,<br />
coordinate_type axis = 0)</font></td>
<td>Flips an object that models interval about the axis coordinate.
@@ -218,26 +238,26 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
- interval_type& <b>scale_up</b>(interval_type& interval, <br>
-
- unsigned_area_type factor)</font></td>
+ interval_type><br />
+ interval_type& <b>scale_up</b>(interval_type& interval, <br />
+
+unsigned_area_type factor)</font></td>
<td>Multiplies low and high ends of an object that models interval by
unsigned factor.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
- interval_type& <b>scale_down</b>(interval_type& interval, <br>
-
- unsigned_area_type factor)</font></td>
+ interval_type><br />
+ interval_type& <b>scale_down</b>(interval_type& interval, <br />
+
+unsigned_area_type factor)</font></td>
<td>Divides low and high ends of an object that models interval by
unsigned factor.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
- interval_type& <b>scale</b>(interval_type& interval,<br>
+ interval_type><br />
+ interval_type& <b>scale</b>(interval_type& interval,<br />
double factor) </font></td>
<td>Multiplies low and high ends of an object that models interval by
@@ -245,8 +265,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
- interval_type& <b>move</b>(interval_type& interval,<br>
+ interval_type><br />
+ interval_type& <b>move</b>(interval_type& interval,<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to low and high ends of an object that
@@ -254,53 +274,53 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
- interval_type& <b>convolve</b>(interval_type& interval,<br>
-
- coordinate_type b)</font></td>
+ interval_type><br />
+ interval_type& <b>convolve</b>(interval_type& interval,<br />
+
+coordinate_type b)</font></td>
<td>Adds coordinate value to low and high ends of an object that models
interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- interval_type><br>
- interval_type& <b>deconvolve</b>(interval_type& interval,<br>
-
- coordinate_type b)</font></td>
+ interval_type><br />
+ interval_type& <b>deconvolve</b>(interval_type& interval,<br />
+
+coordinate_type b)</font></td>
<td>Subtracts coordinate value from low and high ends of an object that
models interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>convolve</b>(T1& a, const T2& b)</font></td>
<td>Adds low end of b to low end of a and adds high end of b to high end
of a.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>deconvolve</b>(T1& a, const T2& b)</font></td>
<td>Subtracts low end of b from low end of a and subtracts high end of b
from high end of a. </td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>reflected_convolve</b>(T1& a, const T2& b)</font></td>
<td>Adds high end of b to low end of a and adds low end of b to high end
of a.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>reflected_deconvolve</b>(T1& a, const T2& b)</font></td>
<td>Subtracts high end of b from low end of a and subtracts low end of b
from high end of a.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- coordinate_difference <b>euclidean_distance</b>(const T&,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ coordinate_difference <b>euclidean_distance</b>(const T&,<br />
coordinate_type)</font></td>
<td>Returns the distance from an object that models interval to a
@@ -309,8 +329,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>intersects</b>(const T1& interval, const T2& b, <br>
+ T2><br />
+ bool <b>intersects</b>(const T1& interval, const T2& b, <br />
bool consider_touch = true)</font></td>
<td>Returns true if two objects that model interval overlap. If
@@ -319,10 +339,10 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>boundaries_intersect</b>(const T1& interval, const T2& b, <br>
-
- bool consider_touch = true)</font></td>
+ T2><br />
+ bool <b>boundaries_intersect</b>(const T1& interval, const T2& b, <br />
+
+bool consider_touch = true)</font></td>
<td>Returns true is two objects that model interval partially overlap
such that one end point of each is contained within the other. If
the consider_touch flag is true a coordinate is considered contained
@@ -330,8 +350,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>abuts</b>(const T1& a, const T2& b,<br>
+ T2><br />
+ bool <b>abuts</b>(const T1& a, const T2& b,<br />
direction_1d dir)
</font></td>
<td>Returns true if interval b abuts but down not overlap interval a on
@@ -339,14 +359,14 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
bool <b>abuts</b>(const T1& a, const T2& b)</font></td>
<td>Returns true if interval b abuts but down not overlap interval a.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>intersect</b>(T1& a, const T2& b,<br>
+ T2><br />
+ bool <b>intersect</b>(T1& a, const T2& b,<br />
bool consider_touch = true) </font></td>
<td>Sets interval a to the intersection of interval a and interval b and
@@ -356,55 +376,55 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T& <b>generalized_intersect</b>(T1& a, const T2& b)</font></td>
<td>Same as intersect, but if they do not intersect set a to the
interval between a and b.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>bloat</b>(T& interval, coordinate_type)</font></td>
<td>Adds the coordinate value to high end of interval and subtracts it
from low end of interval.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>bloat</b>(T& interval, direction_1d, coordinate_type)</font></td>
<td>Adds the coordinate value to high end of interval or subtracts it
from low end of interval depending on the direction_1d.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>shrink</b>(T& interval, coordinate_type)</font></td>
<td>Subtracts the coordinate value from high end of interval and adds it
to low end of interval.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>shrink</b>(T& interval, direction_1d, coordinate_type)</font></td>
<td>Subtracts the coordinate value from high end of interval or adds it
to low end of interval depending on the direction_1d.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
bool <b>encompass</b>(T1& a, const T2& b)</font></td>
<td>Sets low of a to min of low of a and low of b and sets high of a to
max of high of a and high of b. Returns true if b was not
contained within a to begin with.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
bool <b>encompass</b>(T& a, coordinate_type)</font></td>
<td>Sets low of a to min of low of a and coordinate value and sets high
of a to max of high of a and coordinate value. Returns true if
coordinate value was not contained within a to begin with.</td>
</tr>
-</table>
+</tbody></table>
<h1>Interval Data</h1>
<p>
-<p>The library provides a model of interval concept declared
+</p><p>The library provides a model of interval concept declared
<font face="Courier New">
template<typename T> interval_data </font>where T is the coordinate type.</p>
<p>This data type is used internally when an interval is needed and is available
@@ -412,8 +432,8 @@
instead of providing their own. The data type is implemented to be
convenient to use with the library traits.</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">interval_concept</font></td>
</tr>
@@ -444,42 +464,42 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>interval_data& <b>operator=</b>(const T2& that) const</font></td>
+ <br /> </b>interval_data& <b>operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator==</b>(const T2& that) const</font></td>
<td>Compare equality to an object that is a model of interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator!=</b>(const T2& that) const</font></td>
<td>Compare inequality to an object that is a model of interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator<</b>(const T2& that) const</font></td>
<td>Compares low coordinates then high coordinates to break ties.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator<=</b>(const T2& that) const</font></td>
<td>Compares low coordinates then high coordinates to break ties.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator></b>(const T2& that) const</font></td>
<td>Compares low coordinates then high coordinates to break ties.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator>=</b>(const T2& that) const</font></td>
<td>Compares low coordinates then high coordinates to break ties.</td>
</tr>
@@ -493,18 +513,18 @@
dir, T value)</font></td>
<td>Sets the coordinate in the given direction to the value.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table3">
+<table class="docinfo" id="table3" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -517,6 +537,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_isotropy.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_isotropy.htm (original)
+++ trunk/libs/polygon/doc/gtl_isotropy.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Isotropy</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Isotropy</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,6 +39,18 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
@@ -45,32 +60,34 @@
<li>Performance Analysis</li>
<li>Layout Versus Schematic Tutorial</li>
<li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Isotropy</h1>
<p>
-<p align="left">What is isotropy?</p>
-<P:COLORSCHEME
-colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00" />
-<div class="O" style="TEXT-ALIGN: center; mso-line-spacing: '90 0 0'; mso-margin-left-alt: 216; mso-char-wrap: 1; mso-kinsoku-overflow: 1" v:shape="_x0000_s1026">
- <p style="TEXT-ALIGN: left">
- <span style="mso-bidi-font-family: Arial">Isotropy - Function: <i>adjective</i> Etymology: International
- Scientific Vocabulary<br>
+</p><p align="left">What is isotropy?</p>
+<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00">
+</p:colorscheme><div class="O" style="text-align: center;" v:shape="_x0000_s1026">
+ <p style="text-align: left;">
+ <span style="">Isotropy - Function: <i>adjective</i> Etymology: International
+ Scientific Vocabulary<br />
<b>:</b> exhibiting properties (as velocity of light transmission) with the
same values when measured along axes in all directions <an <i>isotropic</i>
- crystal></span></div>
+ crystal></span></p></div>
<p align="left">In computational geometry things are often symmetric and
invariant to direction and orientation. This invariance to direction is
called isotropy. In such situations it is convenient to parameterize
@@ -95,8 +112,8 @@
describing isotropic situations programmatically. For instance, to get the
positive direction_2d from an orientation_2d you would call a member function of
orientation_2d and pass a direction_1d:</p>
-<p align="left"><font face="Courier New">orientation_2d orient = HORIZONTAL;<br>
-direction_2d dir = orient.get_direction(direction_1d(HIGH));<br>
+<p align="left"><font face="Courier New">orientation_2d orient = HORIZONTAL;<br />
+direction_2d dir = orient.get_direction(direction_1d(HIGH));<br />
assert(dir == EAST);</font></p>
<p align="left">The motivation for providing isotropic data types is to
encourage programming at a higher level of abstraction where program behavior is
@@ -114,7 +131,7 @@
<h2>direction_1d</h2>
<p>
-<p align="left">The direction_1d data type has two possible states. These
+</p><p align="left">The direction_1d data type has two possible states. These
are the positive and negative directions on a continuum such as the number line.
These states can be described by one of several direction_1d_enum values:
We make clockwise and counterclockwise winding orientation of polygons a
@@ -122,24 +139,23 @@
type. This is because winding orientation can be thought of as positive
and negative directions in a 1d (although cyclic) space. We assign
counterclockwise to be the positive direction of travel in the 1d cyclic space
-to conform with the mathematical convention frequently described as the "right
-hand rule" which assigns positive normal value to counterclockwise and negative
+to conform with the mathematical convention frequently described as the "right
+hand rule" which assigns positive normal value to counterclockwise and negative
normal value to clockwise as well as the common convention that counterclockwise
polygon winding corresponds to positive polygonal regions where as clockwise
polygon winding corresponds to hole (negative) polygonal regions.</p>
<p align="left"><font face="Courier New">enum direction_1d_enum {LOW = 0, HIGH =
-1,<br>
-
-LEFT = 0, RIGHT = 1,<br>
-
-CLOCKWISE = 0, COUNTERCLOCKWISE = 1,<br>
-
-REVERSE = 0, FORWARD = 1,<br>
-
+1,<br />
+LEFT = 0, RIGHT = 1,<br />
+
+CLOCKWISE = 0, COUNTERCLOCKWISE = 1,<br />
+
+REVERSE = 0, FORWARD = 1,<br />
+
NEGATIVE = 0, POSITIVE = 1 };</font></p>
<h2>Member Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New"><b>direction_1d</b>(direction_1d_enum
val = LOW)</font></td>
<td>Constructor defaults to LOW. </td>
@@ -193,18 +209,18 @@
<td>Returns positive 1 if positive direction and negative one if
negative direction.</td>
</tr>
- </table>
+ </tbody></table>
<h2>orientation_2d</h2>
<p>
-<p align="left">The orientation_2d data type has two possible states.
+</p><p align="left">The orientation_2d data type has two possible states.
These are the horizontal and vertical axis of a 2d Cartesian coordinate system.
These states can be described by one of the two orientation_2d_enum values:</p>
<p align="left"><font face="Courier New">enum orientation_2d_enum { HORIZONTAL =
0, VERTICAL = 1 };</font></p>
<h2>Member Functions</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">orientation_2</font></b><font face="Courier New"><b>d</b>(orientation_2d_enum
val = HORIZONTAL)</font></td>
<td>Constructor defaults to HORIZONTAL. </td>
@@ -261,18 +277,18 @@
<td>Returns the positive or negative direction_2d depending on the value
of dir</td>
</tr>
- </table>
+ </tbody></table>
<h2>direction_2d</h2>
<p>
-<p align="left">The direction_2d data type has four possible states. These
+</p><p align="left">The direction_2d data type has four possible states. These
are the cardinal directions of the 2D Cartesian coordinate system.
These states can be described by one of several direction_2d_enum values:</p>
<p align="left"><font face="Courier New">enum direction_2d_enum { WEST = 0, EAST
= 1, SOUTH = 2, NORTH = 3 };</font></p>
<h2>Member Functions</h2>
-<table border="1" width="100%" id="table3">
- <tr>
+<table id="table3" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New"><b>direction_2d</b>(direction_2d_enum
val = WEST)</font></td>
<td>Constructor defaults to WEST. </td>
@@ -342,19 +358,19 @@
<td>Returns positive 1 if positive direction and negative one if
negative direction.</td>
</tr>
- </table>
+ </tbody></table>
<h2>orientation_3d</h2>
<p>
-<p align="left">The orientation_3d data type has three possible states.
+</p><p align="left">The orientation_3d data type has three possible states.
These are the horizontal, vertical and proximal (x, y, z) axis of a 3d Cartesian
coordinate system. These states can be described by one of the
orientation_2d_enum values or by the orientation_3d_enum value:</p>
<p align="left"><font face="Courier New">enum orientation_3d_enum { PROXIMAL = 2
};</font></p>
<h2>Member Functions</h2>
-<table border="1" width="100%" id="table6">
- <tr>
+<table id="table6" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">orientation_3</font></b><font face="Courier New"><b>d</b>(orientation_2d_enum
val = HORIZONTAL)</font></td>
<td>Constructor defaults to HORIZONTAL. </td>
@@ -416,19 +432,19 @@
<td>Returns the positive or negative direction_2d depending on the value
of dir</td>
</tr>
- </table>
+ </tbody></table>
<h2>direction_3d</h2>
<p>
-<p align="left">The direction_3d data type has six possible states. These
+</p><p align="left">The direction_3d data type has six possible states. These
are the cardinal directions of the 3D Cartesian coordinate system.
These states can be described by one of the direction_2d_enum values or the
direction_3d_enum values:</p>
<p align="left"><font face="Courier New">enum direction_3d_enum { DOWN = 4, UP =
5 };</font></p>
<h2>Member Functions</h2>
-<table border="1" width="100%" id="table5">
- <tr>
+<table id="table5" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New"><b>direction_3d</b>(direction_2d_enum
val = WEST)</font></td>
<td>Constructor defaults to LOW. </td>
@@ -490,18 +506,18 @@
<td>Returns positive 1 if positive direction and negative one if
negative direction.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table7">
+<table class="docinfo" id="table7" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -514,6 +530,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_minkowski_tutorial.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_minkowski_tutorial.htm (original)
+++ trunk/libs/polygon/doc/gtl_minkowski_tutorial.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -96,7 +96,7 @@
convolutions. First we implement a function that convolves all pairs of
edges represented by iterator pairs over points. We assume that the first
point is equal to the last point in each sequence because we know the polygons
-that gave rise to the iterators were produced by the Boost.Polygon algorithm for
+that gave rise to the iterators were produce by the Boost.Polygon algorithm for
general polygon formation.</p>
<p><font face="Courier New" size="2">template <typename itrT1, typename itrT2><br>
void convolve_two_point_sequences(polygon_set& result, itrT1 ab, itrT1 ae, itrT2
@@ -177,7 +177,7 @@
}<br>
}<br>
}</font></p>
-<p>We test the convolution of two polygon sets with the code shown below that
+<p>We test the convolution of two polygon set with the code shown below that
produces the first example shown in this tutorial.<font face="Courier New" size="2">
</font></p>
<p><font face="Courier New" size="2">polygon_set a, b, c;<br>
@@ -197,6 +197,7 @@
polygon poly;<br>
boost::polygon::set_points(poly, pts.begin(), pts.end());<br>
b+=poly;<br>
+polys.clear();<br>
convolve_two_polygon_sets(c, a, b);</font></p>
<p>Output (a is blue, b is green and c is red):</p>
<p><img border="0" src="images/convolution1.PNG" width="438" height="404"></p>
Modified: trunk/libs/polygon/doc/gtl_point_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_point_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_point_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Point Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Point Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,6 +39,18 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
@@ -45,30 +60,34 @@
<li>Performance Analysis</li>
<li>Layout Versus Schematic Tutorial</li>
<li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+
</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Point Concept</h1>
<p>
-<p>
+</p><p>
The point concept tag is <font face="Courier New">
-point_concept</font><p>
+point_concept</font></p><p>
To register a user defined type as a model of point concept, specialize the
geometry concept meta-function for that type. In the example below CPoint is registered as a model of
-point concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CPoint> { typedef point_concept type; };</font><p>
+point concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CPoint> { typedef point_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of a point is that it has an x and y
coordinate. A std::pair<int, int>, boost::tuple<int, int> or boost::array<int, 2>
could all be made models of point by simply providing indirect access to their
@@ -76,116 +95,115 @@
point and interval in the same compilation unit, for obvious reason that
duplicate specialization of the geometry_concept struct is illegal, but also
because it would make overloading generic function by concept ambiguous if a
-type modeled more than one concept.</font><p>
+type modeled more than one concept.</font></p><p>
<font face="Times New Roman">Below is shown the default point traits.
Specialization of these traits is required for types that don't conform to the
-default behavior.</font><p>
-template <typename T><br>
-struct point_traits {<br>
- typedef typename T::coordinate_type coordinate_type;<br>
-<br>
+default behavior.</font></p><p>
+template <typename T><br />
+struct point_traits {<br />
+ typedef typename T::coordinate_type coordinate_type;<br />
+<br />
static inline coordinate_type get(const T& point,
-orientation_2d orient) {<br>
+orientation_2d orient) {<br />
return point.get(orient);
-<br>
- }<br>
-};<br>
-<br>
-template <typename T><br>
-struct point_mutable_traits {<br>
+<br />
+ }<br />
+};<br />
+<br />
+template <typename T><br />
+struct point_mutable_traits {<br />
static inline void set(T& point, orientation_2d orient,
-typename point_traits<T>::coordinate_type value) {<br>
+typename point_traits<T>::coordinate_type value) {<br />
point.set(orient, value);
-<br>
- }<br>
+<br />
+ }<br />
static inline T construct(typename point_traits<T>::coordinate_type
-x_value, typename point_traits<T>::coordinate_type y_value) {<br>
+x_value, typename point_traits<T>::coordinate_type y_value) {<br />
return T(x_value, y_value);
-<br>
- }<br>
-};<p>
+<br />
+ }<br />
+};</p><p>
Example code custom_point.cpp demonstrates
how to map a
- user defined point class to the library point_concept<h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ user defined point class to the library point_concept</p><h2>Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_type <b>get</b>(const T& point, orientation_2d)</font></td>
<td><font face="Times New Roman">Expects a model of point. Returns
the x or y coordinate of the point, depending on the orientation_2d
- value.</font><font face="Courier New"><br>
+ value.</font><font face="Courier New"><br />
</font></td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- coordinate_type><br>
+ coordinate_type><br />
void <b>set</b>(T& point, orientation_2d, coordinate_type)</font></td>
<td><font face="Times New Roman">Expects a model of point.
Sets the x or y coordinate of the point to the coordinate, depending on
the orientation_2d value. </font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T <b>construct</b>(coordinate_type x, coordinate_type y)</font></td>
<td>Construct an object that is a model of point given x and y
coordinate values.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models point into left object
that models point.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- T2><br>
+ T2><br />
bool <b>equivalence</b>(const T& point1, const T2& point2)</font></td>
<td>Given two objects that model point, compares and returns true if
their x and y values are respectively equal to each other.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename point_type><br>
+ <td width="586"><font face="Courier New">template <typename point_type><br />
coordinate_type <b>x</b>(const point_type& point)</font></td>
<td>Returns the x coordinate of an object that models point.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename point_type><br>
+ <td width="586"><font face="Courier New">template <typename point_type><br />
coordinate_type <b>y</b>(const point_type& point)</font></td>
<td>Returns the y coordinate of an object that models point.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename point_type><br>
+ <td width="586"><font face="Courier New">template <typename point_type><br />
void <b>x</b>(point_type& point, coordinate_type )</font></td>
<td>Sets the x coordinate of the object that models point to the
coordinate value. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename point_type><br>
+ <td width="586"><font face="Courier New">template <typename point_type><br />
void <b>y</b>(point_type& point, coordinate_type )</font></td>
<td>Sets the y coordinate of the object that models point to the
coordinate value. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename point_type><br>
- point_type& <b>scale_up</b>(point_type& point, <br>
-
- unsigned_area_type factor)</font></td>
+ <td width="586"><font face="Courier New">template <typename point_type><br />
+ point_type& <b>scale_up</b>(point_type& point, <br />
+unsigned_area_type factor)</font></td>
<td>Multiplies x and y coordinate of an object that models point by
unsigned factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename point_type><br>
- point_type& <b>scale_down</b>(point_type& point, <br>
-
- unsigned_area_type factor)</font></td>
+ <td width="586"><font face="Courier New">template <typename point_type><br />
+ point_type& <b>scale_down</b>(point_type& point, <br />
+
+unsigned_area_type factor)</font></td>
<td>Divides x and y coordinate of an object that models point by
unsigned factor.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename point_type,
- typename scaling_type><br>
- point_type& <b>scale</b>(point_type& point,<br>
+ typename scaling_type><br />
+ point_type& <b>scale</b>(point_type& point,<br />
const scaling_type& factor) </font></td>
<td>Calls the scale member function of scaling type on the x and y value
@@ -193,8 +211,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename point_type,
- typename transform_type><br>
- point_type& <b>transform</b>(point_type& point,<br>
+ typename transform_type><br />
+ point_type& <b>transform</b>(point_type& point,<br />
const transform_type& transform) </font></td>
<td>Calls the transform member function of transform type on the x and y
@@ -202,8 +220,8 @@
transformed values.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename point_type><br>
- point_type& <b>move</b>(point_type& point, orientation_2d<br>
+ <td width="586"><font face="Courier New">template <typename point_type><br />
+ point_type& <b>move</b>(point_type& point, orientation_2d<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to the coordinate of an object that models
@@ -211,30 +229,30 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>convolve</b>(T1& a, const T2& b)</font></td>
<td>Adds x coordinate of b to x coordinate of a and adds y coordinate of
b to y coordinate of a.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>deconvolve</b>(T1& a, const T2& b)</font></td>
<td>Subtracts x coordinate of b from x coordinate of a and subtracts y
coordinate of b from y coordinate of a. </td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- coordinate_distance <b>euclidean_distance</b>(const T1&,<br>
-
- const T2&)</font></td>
+ T2><br />
+ coordinate_distance <b>euclidean_distance</b>(const T1&,<br />
+
+const T2&)</font></td>
<td>Returns the distance from an object that models point to a second
object that models point.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- coordinate_difference <b>euclidean_distance</b>(const T&,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ coordinate_difference <b>euclidean_distance</b>(const T&,<br />
orientation_2d,
coordinate_type)</font></td>
<td>Returns the distance from an object that models point to a
@@ -242,28 +260,28 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- coordinate_difference <b>manhattan_distance</b>(const T1&,<br>
-
- const T2&)</font></td>
+ T2><br />
+ coordinate_difference <b>manhattan_distance</b>(const T1&,<br />
+
+const T2&)</font></td>
<td>Returns the distance in x plus the distance in y from an object that
models point to a second object that models point.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- coordinate_difference <b>distance_squared</b>(const T1&,<br>
-
- const T2&)</font></td>
+ T2><br />
+ coordinate_difference <b>distance_squared</b>(const T1&,<br />
+
+const T2&)</font></td>
<td>Returns the square of the distance in x plus the square of the
distance in y from an object that models point to a second object that
models point.</td>
</tr>
-</table>
+</tbody></table>
<h1>Point Data</h1>
<p>
-<p>The library provides a model of point concept declared
+</p><p>The library provides a model of point concept declared
<font face="Courier New">
template<typename T> point_data </font>where T is the coordinate type.</p>
<p>This data type is used internally when a point is needed and is available to
@@ -273,8 +291,8 @@
<p>Example code point_usage.cpp demonstrates using the
library provided point data type and functions</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">point_concept</font></td>
</tr>
@@ -304,42 +322,42 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>point_data& <b>operator=</b>(const T2& that) const</font></td>
+ <br /> </b>point_data& <b>operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of point.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator==</b>(const T2& that) const</font></td>
<td>Compare equality to an object that is a model of point.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator!=</b>(const T2& that) const</font></td>
<td>Compare inequality to an object that is a model of point.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator<</b>(const T2& that) const</font></td>
<td>Compares y coordinates then x coordinates to break ties.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator<=</b>(const T2& that) const</font></td>
<td>Compares y coordinates then x coordinates to break ties.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator></b>(const T2& that) const</font></td>
<td>Compares low coordinates then high coordinates to break ties.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator>=</b>(const T2& that) const</font></td>
<td>Compares low coordinates then high coordinates to break ties.</td>
</tr>
@@ -369,18 +387,18 @@
<td width="586"><font face="Courier New">void <b>y</b>(T value)</font></td>
<td>Sets the coordinate in the vertical orientation to the value.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table3">
+<table class="docinfo" id="table3" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -393,6 +411,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_45_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_45_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_45_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon 45 Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon 45 Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,40 +39,55 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon 45 Concept</h1>
<p>
-<p>The polygon_45 concept tag is <font face="Courier New">
+</p><p>The polygon_45 concept tag is <font face="Courier New">
polygon_45_concept</font></p>
<p>
To register a user defined type as a model of
<font face="Times New Roman">polygon_45 </font>concept, specialize the
geometry concept meta-function for that type. In the example below CPolygon45 is registered as a model of
-polygon_45 concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CPolygon45> { typedef polygon_45_concept type; };</font><p>
+polygon_45 concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CPolygon45> { typedef polygon_45_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of a polygon_45 is that it can provide
iterators over the points that represent its vertices, angles formed as these
vertices must be multiple of 45-degree relative to the coordinate axis. It
@@ -80,75 +98,75 @@
or std::list<point_data<int> >
could be made models of polygon_45_concept by simply providing access to their
iterators through traits. Library functions that create polygon objects
-require that those objects provide a default constructor.</font><p>
+require that those objects provide a default constructor.</font></p><p>
<font face="Times New Roman">Below is shown the default polygon traits.
Specialization of these traits is required for types that don't conform to the
default behavior. Note that these traits are also used by several other
polygon concepts through SFINAE enable template parameter. The SFINAE enable
parameter also allows the library to provide default specialization that work
-for any object that models the 90 degree polygon concepts.</font><p>
-<font face="Courier New">template <typename T, typename enable = gtl_yes><br>
-struct polygon_traits {};<br>
-<br>
-template <typename T><br>
-struct polygon_traits<T, <br>
- typename gtl_or_4<<br>
+for any object that models the 90 degree polygon concepts.</font></p><p>
+<font face="Courier New">template <typename T, typename enable = gtl_yes><br />
+struct polygon_traits {};<br />
+<br />
+template <typename T><br />
+struct polygon_traits<T, <br />
+ typename gtl_or_4<<br />
typename gtl_same_type<typename geometry_concept<T>::type,
-polygon_concept>::type,<br>
+polygon_concept>::type,<br />
typename gtl_same_type<typename geometry_concept<T>::type,
-polygon_45_concept>::type,<br>
+polygon_45_concept>::type,<br />
typename gtl_same_type<typename geometry_concept<T>::type,
-polygon_with_holes_concept>::type,<br>
+polygon_with_holes_concept>::type,<br />
typename gtl_same_type<typename geometry_concept<T>::type,
-polygon_45_with_holes_concept>::type<br>
- >::type> {<br>
- typedef typename T::coordinate_type coordinate_type;<br>
- typedef typename T::iterator_type iterator_type;<br>
- typedef typename T::point_type point_type;<br>
- static inline iterator_type begin_points(const T& t) {<br>
- return t.begin();<br>
- }<br>
- static inline iterator_type end_points(const T& t) {<br>
- return t.end();<br>
- }<br>
- static inline unsigned int size(const T& t) {<br>
- return t.size();<br>
- }<br>
- static inline winding_direction winding(const T& t) {<br>
- return unknown_winding;<br>
- }<br>
+polygon_45_with_holes_concept>::type<br />
+ >::type> {<br />
+ typedef typename T::coordinate_type coordinate_type;<br />
+ typedef typename T::iterator_type iterator_type;<br />
+ typedef typename T::point_type point_type;<br />
+ static inline iterator_type begin_points(const T& t) {<br />
+ return t.begin();<br />
+ }<br />
+ static inline iterator_type end_points(const T& t) {<br />
+ return t.end();<br />
+ }<br />
+ static inline unsigned int size(const T& t) {<br />
+ return t.size();<br />
+ }<br />
+ static inline winding_direction winding(const T& t) {<br />
+ return unknown_winding;<br />
+ }<br />
};</font></p>
-<p><font face="Courier New">template <typename T, typename enable = void><br>
-struct polygon_mutable_traits {<br>
- template <typename iT><br>
+<p><font face="Courier New">template <typename T, typename enable = void><br />
+struct polygon_mutable_traits {<br />
+ template <typename iT><br />
static inline T& set_points(T& t, iT input_begin, iT
-input_end) {<br>
+input_end) {<br />
t.set(input_begin,
-input_end);<br>
- return t;<br>
- }<br>
+input_end);<br />
+ return t;<br />
+ }<br />
};</font></p>
<p>An object that is a model of <font face="Courier New">
polygon_45_concept</font> can be viewed as a model of any of its
refinements if it is determined at runtime to conform to the restriction of
those concepts. This concept casting is accomplished through the
<font face="Courier New">view_as<>()</font> function.</p>
-<p><font face="Courier New">view_as<rectangle_concept>(polygon_45_object)</font><br>
+<p><font face="Courier New">view_as<rectangle_concept>(polygon_45_object)</font><br />
<font face="Courier New">view_as<polygon_90_concept>(polygon_45_object)</font></p>
<p>The return value of <font face="Courier New">view_as<>()</font> can be
passed into any interface that expects an object of the conceptual type
specified in its template parameter.</p>
<h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>begin_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_45.
Returns the begin iterator over the range of points that correspond to
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>end_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_45.
Returns the end iterator over the range of points that correspond to
@@ -156,7 +174,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_points</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_45.
Sets the polygon to the point data range [b,e) that corresponds to
@@ -164,22 +182,22 @@
points is disallowed.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
unsigned int <b>size</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Returns the number of edges in the
polygon.</font></td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models polygon_45 into left object
that models polygon_45.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- bool <b>contains</b>(const T&, const point_type& point, <br>
+ typename point_type><br />
+ bool <b>contains</b>(const T&, const point_type& point, <br />
bool consider_touch=true)</font></td>
<td>Given an object that models polygon_45 and an object that models
@@ -189,85 +207,84 @@
the polygon. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br>
- template <typename T, typename point_type><br>
+ <td width="586"><font face="Courier New">// get the center coordinate<br />
+ template <typename T, typename point_type><br />
void <b>center</b>(point_type& p, const T& polygon)</font></td>
<td>Sets object that models point to the center point of the bounding
box of an object that models polygon_45. Linear wrt. vertices.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename rectangle_type><br>
+ typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& bbox, const T& polygon)</font></td>
<td>Sets object that models rectangle to the bounding box of an object
that models polygon_45 and returns true. Returns false and leaves
bbox unchanged if polygon is empty. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
area_type <b>area</b>(const T& polygon)</font></td>
<td>Returns the area of an object
that models polygon_45. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
direction_1d <b>winding</b>(const T& polygon)</font></td>
<td>Returns the winding direction of an object
that models polygon_45, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.
Complexity depends upon winding trait.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_distance <b>perimeter</b>(const T& polygon)</font></td>
<td>Returns the perimeter length of an object
that models polygon_45. Linear wrt. vertices.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename transform_type><br>
+ typename transform_type><br />
T& <b>transform</b>(T& polygon, const transform_type&)</font></td>
<td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
transforming its vertices. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales up coordinate of an object that models
polygon_45 by unsigned factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales down coordinates of an object that models
polygon_45 by unsigned factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, scaling_type><br>
+ <td width="586"><font face="Courier New">template <typename T, scaling_type><br />
T& <b>scale</b>(T& rectangle, double scaling) </font></td>
<td>Scales coordinates of an object that models polygon_45 by floating
point factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>move</b>(T& polygon, orientation_2d,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>move</b>(T& polygon, orientation_2d,<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to coordinate indicated by orientation_2d of
vertices of an object that models polygon_45. Linear wrt.
vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br>
- polygon_type& <b>convolve</b>(polygon_type& polygon,<br>
-
- const point_type& point)</font></td>
+ <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br />
+ polygon_type& <b>convolve</b>(polygon_type& polygon,<br />
+const point_type& point)</font></td>
<td>Convolves coordinate values of point with vertices of an
object that models polygon_45. Linear wrt. vertices.</td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon 45 Data</h1>
<p>
-<p>The library provides a model of polygon 45 concept declared
+</p><p>The library provides a model of polygon 45 concept declared
<font face="Courier New">
template<typename T> polygon_45_data </font>where T is the coordinate type.</p>
<p>This data type is used internally when a 45-degree polygon is needed and is
@@ -275,8 +292,8 @@
data type instead of providing their own. The data type is implemented to
be convenient to use with the library traits.</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">polygon_45_concept</font></td>
</tr>
@@ -304,7 +321,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>polygon_45_data& <b>operator=</b>(const T2& that) const</font></td>
+ <br /> </b>polygon_45_data& <b>operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of polygon 45.</td>
</tr>
<tr>
@@ -324,23 +341,23 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
<td>Sets the polygon to the iterator range of points. No check is
performed to ensure the points describe corners that are multiples of 45
degrees relative to the coordinate axis.</td>
</tr>
-</table>
- <tr>
+</tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table3">
+<table class="docinfo" id="table3" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -353,6 +370,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_45_set_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_45_set_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_45_set_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon 45 Set Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon 45 Set Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,32 +39,47 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon 45 Set Concept</h1>
<p>
-<p>The polygon_45_set concept tag is <font face="Courier New">
+</p><p>The polygon_45_set concept tag is <font face="Courier New">
polygon_45_set_concept</font></p>
<p>
<font face="Times New Roman">The semantic of a polygon_45_set is zero or more
@@ -75,7 +93,7 @@
intersection point. In the case that data represented contains no
45-degree angles and is Manhattan a runtime check will default to the Manhattan
algorithm. The results of which are identical to what the 45-degree
-algorithm would do, but obtained more efficiently.</font><p>
+algorithm would do, but obtained more efficiently.</font></p><p>
<font face="Times New Roman">The motivation for providing the polygon_45_set is
to extend the special case of Manhattan geometry capability of the library to
encompass the slightly less common, but still important special case of geometry
@@ -84,7 +102,7 @@
and affords many opportunities for optimization. 45-degree algorithms can
be 50X faster than arbitrary angle algorithms and are required to provide a
complete feature set that meets the performance requirements of application
-domains in which Manhattan and 45-degree geometry are a common special case.</font><p>Users are recommended to use std::vector and std::list of user defined polygons
+domains in which Manhattan and 45-degree geometry are a common special case.</font></p><p>Users are recommended to use std::vector and std::list of user defined polygons
or library provided polygon_45_set_data<coordinate_type> objects. Lists
and vectors of models of polygon_45_concept or polygon_45_with_holes_concept are automatically models of polygon_45_set_concept.</p>
<p>An object that is a model of <font face="Courier New">
@@ -106,10 +124,10 @@
eliminate temp copies of intermediate results when Boolean operators are chained
together.</p>
<p>Operators are declared inside the namespace <font face="Courier New">boost::polygon::operators</font>.</p>
-<table border="1" width="100%" id="table5">
- <tr>
+<table id="table5" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_45_set_view <b>operator</b>|(const T1& l, const T2& r)</font></td>
<td>Boolean OR operation (polygon set union). Accepts two objects
that model polygon_45_set or one of its refinements. Returns an
@@ -119,7 +137,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_45_set_view <b>operator</b>+(const T1& l, const T2& r)</font></td>
<td>Same as operator|. The plus sign is also used for OR
operations in Boolean logic expressions. O( n log n) runtime
@@ -127,7 +145,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_45_set_view <b>operator</b>&(const T1& l, const T2& r)</font></td>
<td>Boolean AND operation (polygon set intersection). Accepts two
objects that model polygon_45_set or one of its refinements. O( n
@@ -135,7 +153,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_45_set_view <b>operator</b>*(const T1& l, const T2& r)</font></td>
<td>Same as operator&. The multiplication symbol is also used for
AND operations in Boolean logic expressions. O( n log n) runtime
@@ -143,7 +161,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_45_set_view <b>operator</b>^(const T1& l, const T2& r)</font></td>
<td>Boolean XOR operation (polygon set disjoint-union). Accepts
two objects that model polygon_45_set or one of its refinements.
@@ -152,7 +170,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_45_set_view <b>operator</b>-(const T1& l, const T2& r)</font></td>
<td>Boolean SUBTRACT operation (polygon set difference). Accepts
two objects that model polygon_45_set or one of its refinements.
@@ -161,7 +179,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>|=(const T1& l, const T2& r)</font></td>
<td>Same as operator|, but with self assignment, left operand must model
polygon_45_set and not one of it's refinements. O( n log n)
@@ -169,7 +187,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>+=(T1& l, const T2& r)</font></td>
<td>Same as operator+, but with self assignment, left operand must model
polygon_45_set and not one of it's refinements. O( n log n)
@@ -177,7 +195,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>&=(const T1& l, const T2& r)</font></td>
<td>Same as operator&, but with self assignment, left operand must model
polygon_45_set and not one of it's refinements. O( n log n)
@@ -185,7 +203,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>*=(T1& l, const T2& r)</font></td>
<td>Same as operator*, but with self assignment, left operand must model
polygon_45_set and not one of it's refinements. O( n log n)
@@ -193,7 +211,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>^=(const T1& l, const T2& r)</font></td>
<td>Same as operator^, but with self assignment, left operand must model
polygon_45_set and not one of it's refinements. O( n log n)
@@ -201,14 +219,14 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>-=(T1& l, const T2& r)</font></td>
<td>Same as operator-, but with self assignment, left operand must model
polygon_45_set and not one of it's refinements. O( n log n)
runtime complexity and O(n) memory wrt vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T1><br>
+ <td width="586"><font face="Courier New">template <typename T1><br />
T1 <b>operator</b>+(const T1&, coordinate_type bloating)</font></td>
<td>Performs resize operation, inflating by bloating ammount. If
negative the result is a shrink instead of bloat. Note: returns
@@ -217,7 +235,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1 <b>operator</b>-(const T1&, coordinate_type shrinking)</font></td>
<td>Performs resize operation, deflating by bloating ammount. If
negative the result is a bloat instead of shrink. Note: returns
@@ -226,7 +244,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>+=(const T1&, coordinate_type bloating)</font></td>
<td>Performs resize operation, inflating by bloating ammount. If
negative the result is a shrink instead of bloat. Returns
@@ -235,19 +253,19 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>-=(const T1&, coordinate_type shrinking)</font></td>
<td>Performs resize operation, deflating by bloating ammount. If
negative the result is a bloat instead of shrink. Returns
reference to modified argument. O( n log n) runtime complexity and
O(n) memory wrt vertices + intersections.</td>
</tr>
- </table>
+ </tbody></table>
<h2>Functions</h2>
-<table border="1" width="100%" id="table3">
- <tr>
+<table id="table3" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& lvalue, const T2& rvalue)</font></td>
<td>Eliminates overlaps in geometry and copies from an object that
models polygon_45_set or any of its refinements into an object that
@@ -256,7 +274,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
bool <b>equivalence</b>(const T1& lvalue, const T2& rvalue) </font></td>
<td>Returns true if an object that models polygon_45_set or one of its
refinements covers the exact same geometric regions as another object
@@ -266,8 +284,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- output_container_type, typename T><br>
- void <b>get_trapezoids</b>(output_container_type& output, <br>
+ output_container_type, typename T><br />
+ void <b>get_trapezoids</b>(output_container_type& output, <br />
const T& polygon_set)</font></td>
<td>Output container is expected to be a standard container.
@@ -280,10 +298,12 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- output_container_type, typename T><br>
- void <b>get_trapezoids</b>(output_container_type& output, <br>
+ output_container_type, typename T><br />
+ void <b>get_trapezoids</b>(output_container_type& output, <br />
- const T& polygon_set,<br> orientation_2d orient)</font></td>
+ const T& polygon_set,<br />
+
+orientation_2d orient)</font></td>
<td>Output container is expected to be a standard container.
Slices geometry of an object that models polygon_45_set or one of its
refinements into non overlapping trapezoids along a the specified slicing
@@ -294,13 +314,13 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- polygon_set_type><br>
+ polygon_set_type><br />
void <b>clear</b>(polygon_set_type& polygon_set)</font></td>
<td>Makes the object empty of geometry.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- polygon_set_type><br>
+ polygon_set_type><br />
bool <b>empty</b>(const polygon_set_type& polygon_set)</font></td>
<td>Checks whether the object is empty of geometry. Polygons that
are completely covered by holes will result in empty returning true.
@@ -308,8 +328,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- rectangle_type><br>
- bool <b>extents</b>(rectangle_type& extents_rectangle, <br>
+ rectangle_type><br />
+ bool <b>extents</b>(rectangle_type& extents_rectangle, <br />
const
T& polygon_set)</font></td>
<td>Computes bounding box of an object that models polygon_45_set and
@@ -319,7 +339,7 @@
log n) runtime complexity and O(n) memory wrt vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
area_type <b>area</b>(const T& polygon_set)</font></td>
<td>Computes the area covered by geometry in an object that models
polygon_45_set. O( n log n) runtime complexity and O(n)
@@ -327,7 +347,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>interact</b>(T1& a, const T2& b)</font></td>
<td>Given an object that models polygon_45_set and an object that models
polygon_45_set or one of its refinements, modifies a to retain only
@@ -335,7 +355,7 @@
runtime complexity and O(n) memory wrt vertices plus intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>self_intersect</b>(T& polygon_set)</font></td>
<td>Given an object that models polygon_45_set that has self overlapping
regions, modifies the argument to contain only the regions of overlap.
@@ -343,7 +363,7 @@
intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>self_xor</b>(T& polygon_set)</font></td>
<td>Given an object that models polygon_45_set that has self overlapping
regions, modifies the argument to contain only the regions that do not
@@ -351,14 +371,14 @@
vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>bloat</b>(T& polygon_set, unsigned_area_type bloating)</font></td>
<td>Same as getting all the polygons, bloating them and putting them
back. O( n log n) runtime complexity and O(n) memory wrt vertices
+ intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>shrink</b>(T& polygon_set, unsigned_area_type shrinking)</font></td>
<td>Same as getting all the polygons, shrinking them and overwriting
the polygon set with the resulting regions. O( n log n) runtime
@@ -366,10 +386,10 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- coord_type><br>
- T& <b>resize</b>(T& polygon_set, coord_type resizing,<br>
+ coord_type><br />
+ T& <b>resize</b>(T& polygon_set, coord_type resizing,<br />
- RoundingOption rounding = CLOSEST, <br> CornerOption corner = INTERSECTION)</font></td>
+ RoundingOption rounding = CLOSEST, <br /> CornerOption corner = INTERSECTION)</font></td>
<td>Same as bloat if resizing is positive, same as shrink if resizing is
negative. RoundingOption is an enum that controls snapping of
non-integer results of resizing 45 degree edges. CornerOption is
@@ -378,7 +398,7 @@
complexity and O(n) memory wrt vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>grow_and</b>(T& polygon_set, unsigned_area_type bloating)</font></td>
<td>Same as bloating non-overlapping regions and then applying self
intersect to retain only the overlaps introduced by the bloat. O(
@@ -386,13 +406,13 @@
intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon_set, unsigned_area_type factor)</font></td>
<td>Scales geometry up by unsigned factor. O( n log n) runtime
complexity and O(n) memory wrt vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon_set, unsigned_area_type factor)</font></td>
<td>Scales geometry down by unsigned factor. Snaps 45 degree edges
back to 45 degrees after division truncation leads to small changes in
@@ -400,7 +420,7 @@
vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, typename scaling_type><br>
+ <td width="586"><font face="Courier New">template <typename T, typename scaling_type><br />
T& <b>scale</b>(polygon_set_type& polygon_set, double scaling)</font></td>
<td>Scales geometry by multiplying by floating point factor.
Snaps 45 degree edges back to 45 degrees after truncation of fractional
@@ -408,32 +428,32 @@
runtime complexity and O(n) memory wrt vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, typename transformation_type><br>
-T& <b>transform</b>(T& polygon_set,<br>
+ <td width="586"><font face="Courier New">template <typename T, typename transformation_type><br />
+T& <b>transform</b>(T& polygon_set,<br />
const
transformation_type& transformation)</font></td>
<td>Applies transformation.transform() on all vertices. O( n log
n) runtime complexity and O(n) memory wrt vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
-T& <b>keep</b>(T& polygon_set, <br>
- unsigned_area_type min_area,<br>
- unsigned_area_type max_area,<br>
- unsigned_area_type min_width,<br>
- unsigned_area_type max_width,<br>
- unsigned_area_type min_height,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+T& <b>keep</b>(T& polygon_set, <br />
+ unsigned_area_type min_area,<br />
+ unsigned_area_type max_area,<br />
+ unsigned_area_type min_width,<br />
+ unsigned_area_type max_width,<br />
+ unsigned_area_type min_height,<br />
unsigned_area_type max_height)</font></td>
<td>Retains only regions that satisfy the min/max criteria in the
argument list. Note: useful for visualization to cull too small
polygons. O( n log n) runtime complexity and O(n) memory wrt
vertices.</td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon 45 Set Data Object</h1>
<p>
-<p>The polygon 45 set data type encapsulates the internal data format that
+</p><p>The polygon 45 set data type encapsulates the internal data format that
serves as the input to the sweep-line algorithm that implements polygon-clipping
Boolean operations. It also internally keeps track of whether that data
has been sorted or scanned and maintains the invariant that when its flags
@@ -444,20 +464,20 @@
maintain the data is sorted form rather than going all the way out to polygons
then resorting those vertices for a subsequent operation.</p>
<p>The declaration of Polygon 45 Set Data is the following:</p>
-<p><font face="Courier New">template <typename T><br>
+<p><font face="Courier New">template <typename T><br />
class polygon_45_set_data;</font></p>
<p>The class is parameterized on the coordinate data type. Algorithms that
benefit from knowledge of the invariants enforced by the class are implemented
as member functions to provide them access to information about those
invariants. </p>
<h2>Member Functions</h2>
-<table border="1" width="100%" id="table4">
- <tr>
+<table id="table4" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New"><b>polygon_45_set_data</b>()</font></td>
<td>Default constructor. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename iT><br>
+ <td width="586"><font face="Courier New">template <typename iT><br />
<b>polygon_45_set_data</b>(iT input_begin, iT
input_end)</font></td>
<td>Construct from an iterator range of
@@ -470,34 +490,34 @@
</tr>
<tr>
<td width="586">
-<font face="Courier New">template <typename l, typename r, typename op><br>
+<font face="Courier New">template <typename l, typename r, typename op><br />
<b>polygon_45_set_data</b>(const polygon_45_set_view<l,r,op>&
t)</font></td>
<td>Copy construct from a Boolean operator template.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">polygon_45_set_data& <br><b>operator=</b>(const polygon_45_set_data& that)</font></td>
+<font face="Courier New">polygon_45_set_data& <br /><b>operator=</b>(const polygon_45_set_data& that)</font></td>
<td>Assignment from another polygon set, may change scanning
orientation.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">template <typename l, typename r, typename op><br>
-polygon_45_set_data& <br><b>operator=</b>(const polygon_45_set_view<l, r,
+<font face="Courier New">template <typename l, typename r, typename op><br />
+polygon_45_set_data& <br /><b>operator=</b>(const polygon_45_set_view<l, r,
op>& that)</font></td>
<td>Assignment from a Boolean operator template.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename geometry_object><br>
+ <td width="586"><font face="Courier New">template <typename geometry_object><br />
polygon_45_set_data& <b>operator=</b>(const geometry_object& geo)</font></td>
<td>Assignment from an insertable object.</td>
</tr>
<tr>
<td width="586">
<font face="Courier New">
-template <typename iT><br>
-void <b>insert</b>(iT input_begin, iT input_end, <br> bool is_hole = false)</font></td>
+template <typename iT><br />
+void <b>insert</b>(iT input_begin, iT input_end, <br /> bool is_hole = false)</font></td>
<td>Insert objects of an iterator range. If is_hole is true
inserts subtractive regions. Linear wrt the number of vertices
added.</td>
@@ -505,15 +525,15 @@
<tr>
<td width="586">
<font face="Courier New">
-void <b>insert</b>(const polygon_45_set_data& polygon_set, <br> bool is_hole
+void <b>insert</b>(const polygon_45_set_data& polygon_set, <br /> bool is_hole
= false)</font></td>
<td>Insert a polygon set. Linear wrt the number of vertices added.</td>
</tr>
<tr>
<td width="586">
<font face="Courier New">
-template <typename geometry_type><br>
-void <b>insert</b>(const geometry_type& geometry_object, <br> bool is_hole
+template <typename geometry_type><br />
+void <b>insert</b>(const geometry_type& geometry_object, <br /> bool is_hole
= false)</font></td>
<td>Insert a geometry object, if is_hole is true then the inserted
region is subtractive rather than additive. Linear wrt the number
@@ -521,7 +541,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get</b>(output_container& output) const</font></td>
<td>Expects a standard container of geometry objects. Will scan
and eliminate overlaps. Converts polygon set geometry to objects
@@ -534,7 +554,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get_polygons</b>(output_container& output) const</font></td>
<td>Expects a standard container of polygon objects. Will scan and
eliminate overlaps. Converts polygon set geometry to polygons and
@@ -544,7 +564,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get_polygons_with_holes</b>(output_container& o) const</font></td>
<td>Expects a standard container of polygon with holes objects. Will scan and
eliminate overlaps. Converts polygon set geometry to polygons and
@@ -553,7 +573,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get_trapezoids</b>(output_container& output) const</font></td>
<td>Expects a standard container of polygon objects. Will scan
and eliminate overlaps. Slices polygon set geometry to trapezoids
@@ -563,8 +583,8 @@
<tr>
<td width="586">
<font face="Courier New">
-template <typename output_container><br>
-void <b>get_trapezoids</b>(output_container& output, <br> orientation_2d
+template <typename output_container><br />
+void <b>get_trapezoids</b>(output_container& output, <br /> orientation_2d
slicing_orientation) const </font>
</td>
<td>Expects a standard container of polygon objects. Will scan
@@ -618,15 +638,15 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename input_iterator_type><br>
-void <b>set</b>(input_iterator_type input_begin, <br> input_iterator_type input_end) </font>
+template <typename input_iterator_type><br />
+void <b>set</b>(input_iterator_type input_begin, <br /> input_iterator_type input_end) </font>
</td>
<td>Overwrite geometry in polygon set with insertable objects in the
iterator range. </td>
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename rectangle_type><br>
+template <typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& extents_rectangle) const</font></td>
<td>Given an object that models rectangle, scans and eliminates overlaps
in the polygon set because subtractive regions may alter its extents
@@ -636,9 +656,9 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-polygon_45_set_data&<br>
-<b>resize</b>(coord_type resizing,<br>
- RoundingOption rounding = CLOSEST, <br> CornerOption
+polygon_45_set_data&<br />
+<b>resize</b>(coord_type resizing,<br />
+ RoundingOption rounding = CLOSEST, <br /> CornerOption
corner = INTERSECTION)</font></td>
<td>Same as bloat if resizing is positive, same as shrink if resizing is
negative. RoundingOption is an enum that controls snapping of
@@ -649,8 +669,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename transformation_type><br>
-polygon_45_set_data& <br><b>transform</b>(const transformation_type& transformation) </font>
+template <typename transformation_type><br />
+polygon_45_set_data& <br /><b>transform</b>(const transformation_type& transformation) </font>
</td>
<td>Applies transformation.transform() on vertices stored within the
polygon set. O(n log n) runtime and O(n) memory wrt. vertices +
@@ -708,18 +728,18 @@
<td>Retain only overlapping regions of geometry within a polygon set.
O(n log n) runtime and O(n) memory wrt. vertices + intersections.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table6">
+<table class="docinfo" id="table6" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -732,6 +752,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon 45 With Holes Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon 45 With Holes Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,91 +39,106 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon 45 With Holes Concept</h1>
<p>
-<p>The polygon_45_with_holes concept tag is <font face="Courier New">
+</p><p>The polygon_45_with_holes concept tag is <font face="Courier New">
polygon_45_with_holes_concept</font></p>
<p>
To register a user defined type as a model of
<font face="Times New Roman">polygon_45_with_holes </font>concept, specialize
the geometry concept meta-function for that type. In the example below
-CPolygon45WithHoles is registered as a model of polygon<font face="Times New Roman">_45_with_holes </font> concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CPolygon45WithHoles> { typedef polygon_45_with_holes_concept type; };</font><p>
+CPolygon45WithHoles is registered as a model of polygon<font face="Times New Roman">_45_with_holes </font> concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CPolygon45WithHoles> { typedef polygon_45_with_holes_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of a polygon_45_with_holes is a
polygon_45 that it can provide iterators over holes that are also polygon_45.
A mutable polygon_45_with_holes must also be able to set its geometry based on
an interator range over polygon_45 holes. There is no convention of
-winding of holes enforced within the library. </font><p>
+winding of holes enforced within the library. </font></p><p>
<font face="Times New Roman">Below is shown the default polygon with holes
traits. Specialization of these traits is required for types that don't
-conform to the default behavior.</font><p><font face="Courier New">template <typename
-T, typename enable = void><br>
-struct polygon_with_holes_traits {<br>
+conform to the default behavior.</font></p><p><font face="Courier New">template <typename
+T, typename enable = void><br />
+struct polygon_with_holes_traits {<br />
typedef typename T::iterator_holes_type
-iterator_holes_type;<br>
- typedef typename T::hole_type hole_type;<br>
+iterator_holes_type;<br />
+ typedef typename T::hole_type hole_type;<br />
static inline iterator_holes_type begin_holes(const T&
-t) {<br>
- return t.begin_holes();<br>
- }<br>
+t) {<br />
+ return t.begin_holes();<br />
+ }<br />
static inline iterator_holes_type end_holes(const T& t)
-{<br>
- return t.end_holes();<br>
- }<br>
- static inline unsigned int size_holes(const T& t) {<br>
- return t.size_holes();<br>
- }<br>
+{<br />
+ return t.end_holes();<br />
+ }<br />
+ static inline unsigned int size_holes(const T& t) {<br />
+ return t.size_holes();<br />
+ }<br />
};</font></p>
-<p><font face="Courier New">template <typename T, typename enable = void><br>
-struct polygon_with_holes_mutable_traits {<br>
- template <typename iT><br>
+<p><font face="Courier New">template <typename T, typename enable = void><br />
+struct polygon_with_holes_mutable_traits {<br />
+ template <typename iT><br />
static inline T& set_holes(T& t, iT inputBegin, iT
-inputEnd) {<br>
+inputEnd) {<br />
t.set_holes(inputBegin,
-inputEnd);<br>
- return t;<br>
- }<br>
+inputEnd);<br />
+ return t;<br />
+ }<br />
};</font></p>
<p>An object that is a model of <font face="Courier New">
polygon_45_with_holes_concept</font> can be viewed as a model of any of its
refinements if it is determined at runtime to conform to the restriction of
those concepts. This concept casting is accomplished through the
<font face="Courier New">view_as<>()</font> function.</p>
-<p><font face="Courier New">view_as<rectangle_concept>(polygon_45_with_holes_object)</font><br>
-<font face="Courier New">view_as<polygon_90_concept>(polygon_45_with_holes_object)</font><br>
-<font face="Courier New">view_as<polygon_90_with_holes_concept>(polygon_45_with_holes_object)</font><br>
+<p><font face="Courier New">view_as<rectangle_concept>(polygon_45_with_holes_object)</font><br />
+<font face="Courier New">view_as<polygon_90_concept>(polygon_45_with_holes_object)</font><br />
+<font face="Courier New">view_as<polygon_90_with_holes_concept>(polygon_45_with_holes_object)</font><br />
<font face="Courier New">view_as<polygon_45_concept>(polygon_45_with_holes_object)</font></p>
<p>The return value of <font face="Courier New">view_as<>()</font> can be
passed into any interface that expects an object of the conceptual type
specified in its template parameter. </p>
<h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>begin_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_45_with_holes.
@@ -128,7 +146,7 @@
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>end_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_45_with_holes.
@@ -136,7 +154,7 @@
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
hole_iterator_type <b>begin_holes</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_45_with_holes.
@@ -144,7 +162,7 @@
to horizontal and vertical edges.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
hole_iterator_type <b>end_holes</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_45_with_holes.
@@ -153,7 +171,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_points</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_45_with_holes.
@@ -162,14 +180,14 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_holes</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_45_with_holes.
Sets the polygon holes to the hole data range [b,e)</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
unsigned int <b>size</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Returns the number of edges in the
outer shell of the polygon_45_with_holes. Does not include sizes
@@ -177,7 +195,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models polygon_45_with_holes or
one of its refinements into left object
@@ -185,8 +203,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- bool <b>contains</b>(const T&, const point_type& point, <br>
+ typename point_type><br />
+ bool <b>contains</b>(const T&, const point_type& point, <br />
bool consider_touch=true)</font></td>
<td>Given an object that models polygon_45_with_holes and an object that models
@@ -197,86 +215,85 @@
the polygon or one of its holes.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br>
- template <typename T, typename point_type><br>
+ <td width="586"><font face="Courier New">// get the center coordinate<br />
+ template <typename T, typename point_type><br />
void <b>center</b>(point_type& p, const T& polygon)</font></td>
<td>Sets object that models point to the center point of the bounding
box of an object that models polygon_45_with_holes.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename rectangle_type><br>
+ typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& bbox, const T& polygon)</font></td>
<td>Sets object that models rectangle to the bounding box of an object
that models polygon_45_with_holes and returns true. Returns false
and leaves bbox unchanged if polygon is empty.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
manhattan_area_type <b>area</b>(const T& polygon)</font></td>
<td>Returns the area of an object
that models polygon_45_with_holes including subtracting the area of its
holes from the area of the outer shell polygon.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
direction_1d <b>winding</b>(const T& polygon)</font></td>
<td>Returns the winding direction of an object
that models polygon_45_with_holes, LOW == CLOCKWISE, HIGH =
COUNTERCLOCKWISE.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_difference <b>perimeter</b>(const T& polygon)</font></td>
<td>Returns the perimeter length of an object
that models polygon_45, including the perimeters of the holes.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename transform_type><br>
+ typename transform_type><br />
T& <b>transform</b>(T& polygon, const transform_type&)</font></td>
<td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
transforming its vertices. Also applies transform() on the holes
of the polygon.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales up outer shell and holes of an object that models
polygon_45 by unsigned factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales down outer shell and holes of an object that models
polygon_45 by unsigned factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, scaling_type><br>
+ <td width="586"><font face="Courier New">template <typename T, scaling_type><br />
T& <b>scale</b>(T& rectangle, double scaling) </font></td>
<td>Scales outer shell and holes of an object that models polygon_45 by
floating point factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>move</b>(T& polygon, orientation_2d,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>move</b>(T& polygon, orientation_2d,<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to coordinate indicated by orientation_2d of
vertices of an object that models polygon_45 .</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br>
- polygon_type& <b>convolve</b>(polygon_type& polygon,<br>
-
- const point_type& point)</font></td>
+ <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br />
+ polygon_type& <b>convolve</b>(polygon_type& polygon,<br />
+const point_type& point)</font></td>
<td>Convolves coordinate values of point with the outer shell and holes of an
object that models polygon_45_with_holes.</td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon 45 With Holes Data</h1>
<p>
-<p>The library provides a model of polygon 45 with holes concept declared
+</p><p>The library provides a model of polygon 45 with holes concept declared
<font face="Courier New">
template<typename T> polygon_45_with_holes_data </font>where T is the
coordinate type.</p>
@@ -285,8 +302,8 @@
library polygon data type instead of providing their own. The data type is
implemented to be convenient to use with the library traits.</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">polygon_45_with_holes_concept</font></td>
</tr>
@@ -314,13 +331,13 @@
</tr>
<tr>
<td width="586"><font face="Courier New">polygon_45_with_holes_data& <b>
- <br>operator=</b>(const polygon_45_with_holes_data& that)</font></td>
+ <br />operator=</b>(const polygon_45_with_holes_data& that)</font></td>
<td>Assignment operator.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b> </b>
polygon_45_with_holes_data&<b>
- <br> operator=</b>(const T2& that) const</font></td>
+ <br /> operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of polygon 45 with holes.</td>
</tr>
<tr>
@@ -356,30 +373,30 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
<td>Sets the polygon to the iterator range of points. No check is
performed to ensure the points describe a 45 degree figure.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
+ <br /> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
<td>Sets the polygon holes the iterator range of hole polygons. These
polygons in the input range may be either polygon_45_data or
polygon_45_with_holes_data or any type that provides begin and end
member functions to iterate over point_data<T>.</td>
</tr>
-</table>
- <tr>
+</tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table3">
+<table class="docinfo" id="table3" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -392,6 +409,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_90_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_90_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_90_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon 90 Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon 90 Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,40 +39,55 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon 90 Concept</h1>
<p>
-<p>The polygon_90 concept tag is <font face="Courier New">
+</p><p>The polygon_90 concept tag is <font face="Courier New">
polygon_90_concept</font></p>
<p>
To register a user defined type as a model of
<font face="Times New Roman">polygon_90 </font>concept, specialize the
geometry concept meta-function for that type. In the example below CPolygon90 is registered as a model of
-polygon_90 concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CPolygon90> { typedef polygon_90_concept type; };</font><p>
+polygon_90 concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CPolygon90> { typedef polygon_90_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of a polygon_90 is that it can provide
iterators over the x and y coordinates that correspond to its horizontal and
vertical sides, starting with an x coordinate. A mutable polygon_90 must
@@ -80,40 +98,40 @@
specialization of polygon_90_traits. A std::vector<int> or std::list<int>
could be made models of polygon_90_concept by simply providing access to their
iterators through traits. Library functions that create polygon objects
-require that those objects provide a default constructor.</font><p>
+require that those objects provide a default constructor.</font></p><p>
<font face="Times New Roman">Below is shown the default polygon traits.
Specialization of these traits is required for types that don't conform to the
default behavior. Note that these traits are also used by the
-polygon_90_with_holes concept.</font><p><font face="Courier New">template <typename
-T><br>
-struct polygon_90_traits {<br>
- typedef typename T::coordinate_type coordinate_type;<br>
+polygon_90_with_holes concept.</font></p><p><font face="Courier New">template <typename
+T><br />
+struct polygon_90_traits {<br />
+ typedef typename T::coordinate_type coordinate_type;<br />
typedef typename T::compact_iterator_type
-compact_iterator_type;<br>
+compact_iterator_type;<br />
static inline compact_iterator_type begin_compact(const
-T& t) {<br>
- return t.begin_compact();<br>
- }<br>
+T& t) {<br />
+ return t.begin_compact();<br />
+ }<br />
static inline compact_iterator_type end_compact(const
-T& t) {<br>
- return t.end_compact();<br>
- }<br>
- static inline unsigned int size(const T& t) {<br>
- return t.size();<br>
- }<br>
- static inline winding_direction winding(const T& t) {<br>
- return unknown_winding;<br>
- }<br>
+T& t) {<br />
+ return t.end_compact();<br />
+ }<br />
+ static inline unsigned int size(const T& t) {<br />
+ return t.size();<br />
+ }<br />
+ static inline winding_direction winding(const T& t) {<br />
+ return unknown_winding;<br />
+ }<br />
};</font></p>
-<p><font face="Courier New">template <typename T><br>
-struct polygon_90_mutable_traits { <br>
- template <typename iT><br>
+<p><font face="Courier New">template <typename T><br />
+struct polygon_90_mutable_traits { <br />
+ template <typename iT><br />
static inline T& set_compact(T& t, iT input_begin, iT
-input_end) {<br>
+input_end) {<br />
t.set_compact(input_begin,
-input_end);<br>
- return t;<br>
- }</font><br>
+input_end);<br />
+ return t;<br />
+ }</font><br />
<font face="Courier New">};</font></p>
<p>An object that is a model of <font face="Courier New">
polygon_90_concept</font> can be viewed as a model of any of its
@@ -125,30 +143,30 @@
passed into any interface that expects an object of the conceptual type
specified in its template parameter.</p>
<h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
compact_iterator_type <b>begin_compact</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_90.
Returns the begin iterator over the range of coordinates that correspond
to horizontal and vertical edges.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
compact_iterator_type <b>end_compact</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_90.
Returns the end iterator over the range of coordinates that correspond
to horizontal and vertical edges.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>begin_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_90.
Returns the begin iterator over the range of points that correspond to
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>end_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_90.
Returns the end iterator over the range of points that correspond to
@@ -156,7 +174,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_compact</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_90.
Sets the polygon to the coordinate data range [b,e) that corresponds to
@@ -164,7 +182,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_points</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_90.
Sets the polygon to the point data range [b,e) that corresponds to
@@ -172,22 +190,22 @@
successive input points results in undefined behavior.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
unsigned int <b>size</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Returns the number of edges in the
polygon.</font></td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models polygon_90 into left object
that models polygon_90.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- bool <b>contains</b>(const T&, const point_type& point, <br>
+ typename point_type><br />
+ bool <b>contains</b>(const T&, const point_type& point, <br />
bool consider_touch=true)</font></td>
<td>Given an object that models polygon_90 and an object that models
@@ -197,85 +215,84 @@
the polygon. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br>
- template <typename T, typename point_type><br>
+ <td width="586"><font face="Courier New">// get the center coordinate<br />
+ template <typename T, typename point_type><br />
void <b>center</b>(point_type& p, const T& polygon)</font></td>
<td>Sets object that models point to the center point of the bounding
box of an object that models polygon_90. Linear wrt. vertices.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename rectangle_type><br>
+ typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& bbox, const T& polygon)</font></td>
<td>Sets object that models rectangle to the bounding box of an object
that models polygon_90 and returns true. Returns false and leaves
bbox unchanged if polygon is empty. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
manhattan_area_type <b>area</b>(const T& polygon)</font></td>
<td>Returns the area of an object
that models polygon_90. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
direction_1d <b>winding</b>(const T& polygon)</font></td>
<td>Returns the winding direction of an object
that models polygon_90, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.
Complexity depends upon winding trait.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_difference <b>perimeter</b>(const T& polygon)</font></td>
<td>Returns the perimeter length of an object
that models polygon_90. Linear wrt. vertices.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename transform_type><br>
+ typename transform_type><br />
T& <b>transform</b>(T& polygon, const transform_type&)</font></td>
<td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
transforming its vertices. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales up coordinate of an object that models
polygon_90 by unsigned factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales down coordinates of an object that models
polygon_90 by unsigned factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, scaling_type><br>
+ <td width="586"><font face="Courier New">template <typename T, scaling_type><br />
T& <b>scale</b>(T& rectangle, double scaling) </font></td>
<td>Scales coordinates of an object that models polygon_90 by floating
point factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>move</b>(T& polygon, orientation_2d,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>move</b>(T& polygon, orientation_2d,<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to coordinate indicated by orientation_2d of
vertices of an object that models polygon_90 . Linear wrt.
vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br>
- polygon_type& <b>convolve</b>(polygon_type& polygon,<br>
-
- const point_type& point)</font></td>
+ <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br />
+ polygon_type& <b>convolve</b>(polygon_type& polygon,<br />
+const point_type& point)</font></td>
<td>Convolves coordinate values of point with vertices of an
object that models polygon_90. Linear wrt. vertices.</td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon 90 Data</h1>
<p>
-<p>The library provides a model of polygon 90 concept declared
+</p><p>The library provides a model of polygon 90 concept declared
<font face="Courier New">
template<typename T> polygon_90_data </font>where T is the coordinate type.</p>
<p>This data type is used internally when a Manhattan polygon is needed and is
@@ -283,8 +300,8 @@
data type instead of providing their own. The data type is implemented to
be convenient to use with the library traits.</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">polygon_90_concept</font></td>
</tr>
@@ -319,7 +336,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>polygon_90_data& <b>operator=</b>(const T2& that) const</font></td>
+ <br /> </b>polygon_90_data& <b>operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of polygon 90.</td>
</tr>
<tr>
@@ -351,31 +368,31 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
<td>Sets the polygon to the iterator range of points. No check is
performed to ensure the points describe a Manhattan figure, every other
x and y value of the points is used to initialize the polygon.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set_compact</b>(iT begin_coords, iT end_coords)</font></td>
+ <br /> </b>void <b>set_compact</b>(iT begin_coords, iT end_coords)</font></td>
<td>Sets the polygon to the iterator range of coordinates. These
coordinates correspond to the x values of vertical edges and y values of
horizontal edges. It is expected that the sequence start with an x
value and proceed x then y then x then y.</td>
</tr>
-</table>
- <tr>
+</tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table3">
+<table class="docinfo" id="table3" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -388,6 +405,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_90_set_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_90_set_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_90_set_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon 90 Set Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon 90 Set Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,36 +39,51 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon 90 Set Concept</h1>
<p>
-<p>The polygon_90_set concept tag is <font face="Courier New">
+</p><p>The polygon_90_set concept tag is <font face="Courier New">
polygon_90_set_concept</font></p>
<p>
<font face="Times New Roman">The semantic of a polygon_90_set is zero or more
-Manhattan geometry regions.</font><p>
+Manhattan geometry regions.</font></p><p>
<font face="Times New Roman">The motivation for providing the
polygon_90_set_concept is that it is a very common special case of planar
geometry which afford the implementation of a variety of optimizations on the
@@ -73,7 +91,7 @@
polygon_90_set_concept can be 100X faster than arbitrary angle polygon
manipulation. Because the performance benefits are so large and the
special case is important enough, the library provides these performance
-benefits for those application domains that require them.</font><p>Users are recommended to use std::vector and std::list of user defined polygons
+benefits for those application domains that require them.</font></p><p>Users are recommended to use std::vector and std::list of user defined polygons
or library provided polygon_90_set_data<coordinate_type> objects. Lists
and vectors of models of polygon_90_concept or polygon_90_with_holes_concept or
rectangle_concept are automatically models of polygon_90_set_concept.</p>
@@ -85,10 +103,10 @@
eliminate temp copies of intermediate results when Boolean operators are chained
together.</p>
<p>Operators are declared inside the namespace <font face="Courier New">boost::polygon::operators</font>.</p>
-<table border="1" width="100%" id="table3">
- <tr>
+<table id="table3" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_90_set_view <b>operator</b>|(const T1& l, const T2& r)</font></td>
<td>Boolean OR operation (polygon set union). Accepts two objects
that model polygon_90_set or one of its refinements. Returns an
@@ -98,7 +116,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_90_set_view <b>operator</b>+(const T1& l, const T2& r)</font></td>
<td>Same as operator|. The plus sign is also used for OR
operations in Boolean logic expressions. O( n log n) runtime
@@ -106,7 +124,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_90_set_view <b>operator</b>&(const T1& l, const T2& r)</font></td>
<td>Boolean AND operation (polygon set intersection). Accepts two
objects that model polygon_90_set or one of its refinements. O( n
@@ -114,7 +132,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_90_set_view <b>operator</b>*(const T1& l, const T2& r)</font></td>
<td>Same as operator&. The multiplication symbol is also used for
AND operations in Boolean logic expressions. O( n log n) runtime
@@ -122,7 +140,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_90_set_view <b>operator</b>^(const T1& l, const T2& r)</font></td>
<td>Boolean XOR operation (polygon set disjoint-union). Accepts
two objects that model polygon_90_set or one of its refinements.
@@ -132,7 +150,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_90_set_view <b>operator</b>-(const T1& l, const T2& r)</font></td>
<td>Boolean SUBTRACT operation (polygon set difference). Accepts
two objects that model polygon_90_set or one of its refinements.
@@ -141,7 +159,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>|=(const T1& l, const T2& r)</font></td>
<td>Same as operator|, but with self assignment, left operand must model
polygon_90_set and not one of it's refinements. O( n log n)
@@ -149,7 +167,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>+=(T1& l, const T2& r)</font></td>
<td>Same as operator+, but with self assignment, left operand must model
polygon_90_set and not one of it's refinements. O( n log n)
@@ -157,7 +175,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>&=(const T1& l, const T2& r)</font></td>
<td>Same as operator&, but with self assignment, left operand must model
polygon_90_set and not one of it's refinements. O( n log n)
@@ -165,7 +183,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>*=(T1& l, const T2& r)</font></td>
<td>Same as operator*, but with self assignment, left operand must model
polygon_90_set and not one of it's refinements. O( n log n)
@@ -173,7 +191,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>^=(const T1& l, const T2& r)</font></td>
<td>Same as operator^, but with self assignment, left operand must model
polygon_90_set and not one of it's refinements. O( n log n)
@@ -181,14 +199,14 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>-=(T1& l, const T2& r)</font></td>
<td>Same as operator-, but with self assignment, left operand must model
polygon_90_set and not one of it's refinements. O( n log n)
runtime complexity and O(n) memory wrt vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T1><br>
+ <td width="586"><font face="Courier New">template <typename T1><br />
T1 <b>operator</b>+(const T1&, coordinate_type bloating)</font></td>
<td>Performs resize operation, inflating by bloating ammount. If
negative the result is a shrink instead of bloat. Note: returns
@@ -197,7 +215,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1 <b>operator</b>-(const T1&, coordinate_type shrinking)</font></td>
<td>Performs resize operation, deflating by bloating ammount. If
negative the result is a bloat instead of shrink. Note: returns
@@ -206,7 +224,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>+=(const T1&, coordinate_type bloating)</font></td>
<td>Performs resize operation, inflating by bloating ammount. If
negative the result is a shrink instead of bloat. Returns
@@ -215,19 +233,19 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>-=(const T1&, coordinate_type shrinking)</font></td>
<td>Performs resize operation, deflating by bloating ammount. If
negative the result is a bloat instead of shrink. Returns
reference to modified argument. O( n log n) runtime complexity and
O(n) memory wrt vertices + intersections.</td>
</tr>
- </table>
+ </tbody></table>
<h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& lvalue, const T2& rvalue)</font></td>
<td>Eliminates overlaps in geometry and copies from an object that
models polygon_90_set or any of its refinements into an object that
@@ -236,7 +254,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
bool <b>equivalence</b>(const T1& lvalue, const T2& rvalue) </font></td>
<td>Returns true if an object that models polygon_90_set or one of its
refinements covers the exact same geometric regions as another object
@@ -246,8 +264,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- output_container_type, typename T><br>
- void <b>get_rectangles</b>(output_container_type& output, <br>
+ output_container_type, typename T><br />
+ void <b>get_rectangles</b>(output_container_type& output, <br />
const T& polygon_set)</font></td>
<td>Output container is expected to be a standard container.
@@ -258,10 +276,9 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- output_container_type, typename T><br>
- void <b>get_max_rectangles</b>(output_container_type& output, <br>
-
- const T& polygon_set)</font></td>
+ output_container_type, typename T><br />
+ void <b>get_max_rectangles</b>(output_container_type& output, <br />
+const T& polygon_set)</font></td>
<td>Output container is expected to be a standard container. Given
an object that models polygon_90_set or one of its refinements finds all
overlapping rectangles that are maximal in area and appends them to the
@@ -269,13 +286,13 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- polygon_set_type><br>
+ polygon_set_type><br />
void <b>clear</b>(polygon_set_type& polygon_set)</font></td>
<td>Makes the object empty of geometry.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- polygon_set_type><br>
+ polygon_set_type><br />
bool <b>empty</b>(const polygon_set_type& polygon_set)</font></td>
<td>Checks whether the object is empty of geometry. Polygons that
are completely covered by holes will result in empty returning true.
@@ -284,8 +301,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- rectangle_type><br>
- bool <b>extents</b>(rectangle_type& extents_rectangle, <br>
+ rectangle_type><br />
+ bool <b>extents</b>(rectangle_type& extents_rectangle, <br />
const
T& polygon_set)</font></td>
<td>Computes bounding box of an object that models polygon_90_set and
@@ -295,7 +312,7 @@
runtime complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
manhattan_area_type <b>area</b>(const T& polygon_set)</font></td>
<td>Computes the area covered by geometry in an object that models
polygon_90_set. O( n log n) runtime complexity and O(n) memory wrt
@@ -303,7 +320,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>interact</b>(T1& a, const T2& b)</font></td>
<td>Given an object that models polygon_90_set and an object that models
polygon_90_set or one of its refinements, modifies a to retain only
@@ -311,7 +328,7 @@
complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>self_intersect</b>(T& polygon_set)</font></td>
<td>Given an object that models polygon_90_set that has self overlapping
regions, modifies the argument to contain only the regions of overlap.
@@ -319,7 +336,7 @@
intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>self_xor</b>(T& polygon_set)</font></td>
<td>Given an object that models polygon_90_set that has self overlapping
regions, modifies the argument to contain only the regions that do not
@@ -327,24 +344,24 @@
vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>bloat</b>(T& polygon_set, unsigned_area_type bloating)</font></td>
<td>Same as getting all the rectangles, bloating them and putting them
back. O( n log n) runtime complexity and O(n) memory wrt vertices
+ intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>bloat</b>(T& polygon_set, orientation_2d orient,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>bloat</b>(T& polygon_set, orientation_2d orient,<br />
unsigned_area_type bloating)</font></td>
<td>Same as getting all the rectangles, bloating them and putting them
back. O( n log n) runtime complexity and O(n) memory wrt vertices
+ intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>bloat</b>(T& polygon_set, orientation_2d orient,<br>
- unsigned_area_type low_bloating,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>bloat</b>(T& polygon_set, orientation_2d orient,<br />
+ unsigned_area_type low_bloating,<br />
unsigned_area_type
high_bloating)</font></td>
<td>Same as getting all the rectangles, bloating them and putting them
@@ -352,22 +369,22 @@
+ intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>bloat</b>(T& polygon_set, direction_2d dir,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>bloat</b>(T& polygon_set, direction_2d dir,<br />
unsigned_area_type bloating)</font></td>
<td>Same as getting all the rectangles, bloating them and putting them
back. O( n log n) runtime complexity and O(n) memory wrt vertices
+ intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>bloat</b>(T& polygon_set, <br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>bloat</b>(T& polygon_set, <br />
unsigned_area_type
- west_bloating,<br>
+ west_bloating,<br />
unsigned_area_type
- east_bloating,<br>
+ east_bloating,<br />
unsigned_area_type
- south_bloating,<br>
+ south_bloating,<br />
unsigned_area_type
north_bloating)</font></td>
<td>Same as getting all the rectangles, bloating them and putting them
@@ -375,15 +392,15 @@
+ intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>shrink</b>(T& polygon_set, unsigned_area_type shrinking)</font></td>
<td>Same as getting all the rectangles of the inverse, bloating them and overwriting
the polygon set with the resulting regions then negating. O( n log
n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>shrink</b>(T& polygon_set, orientation_2d orient,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>shrink</b>(T& polygon_set, orientation_2d orient,<br />
unsigned_area_type
shrinking)</font></td>
<td>Same as getting all the rectangles of the inverse, bloating them and overwriting
@@ -391,10 +408,10 @@
n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>shrink</b>(T& polygon_set, orientation_2d orient,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>shrink</b>(T& polygon_set, orientation_2d orient,<br />
unsigned_area_type
- low_shrinking,<br>
+ low_shrinking,<br />
unsigned_area_type
high_shrinking)</font></td>
<td>Same as getting all the rectangles of the inverse, bloating them and overwriting
@@ -402,8 +419,8 @@
n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>shrink</b>(T& polygon_set, direction_2d dir,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>shrink</b>(T& polygon_set, direction_2d dir,<br />
unsigned_area_type
shrinking)</font></td>
<td>Same as getting all the rectangles of the inverse, bloating them and overwriting
@@ -411,14 +428,14 @@
n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>shrink</b>(T& polygon_set, <br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>shrink</b>(T& polygon_set, <br />
unsigned_area_type
- west_shrinking,<br>
+ west_shrinking,<br />
unsigned_area_type
- east_shrinking,<br>
+ east_shrinking,<br />
unsigned_area_type
- south_shrinking,<br>
+ south_shrinking,<br />
unsigned_area_type
north_shrinking)</font></td>
<td>Same as getting all the rectangles of the inverse, bloating them and overwriting
@@ -427,23 +444,23 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- coord_type><br>
+ coord_type><br />
T& <b>resize</b>(T& polygon_set, coord_type resizing)</font></td>
<td>Same as bloat if resizing is positive, same as shrink if resizing is
negative.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- coord_type><br>
- T& <b>resize</b>(polygon_set_type& polygon_set, <br>
+ coord_type><br />
+ T& <b>resize</b>(polygon_set_type& polygon_set, <br />
coord_type west, coord_type east,
- <br> coord_type south, coord_type north)</font></td>
+ <br /> coord_type south, coord_type north)</font></td>
<td>Same as bloat if resizing is positive, same as shrink if resizing is
negative. O( n log n) runtime complexity and O(n) memory wrt
vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>grow_and</b>(T& polygon_set, unsigned_area_type bloating)</font></td>
<td>Same as bloating non-overlapping regions and then applying self
intersect to retain only the overlaps introduced by the bloat. O(
@@ -451,8 +468,8 @@
intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
-T& <b>grow_and</b>(T& polygon_set, orientation_2d orient,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+T& <b>grow_and</b>(T& polygon_set, orientation_2d orient,<br />
unsigned_area_type bloating)</font></td>
<td>Same as bloating non-overlapping regions and then applying self
@@ -461,10 +478,10 @@
intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
-T& <b>grow_and</b>(T& polygon_set, orientation_2d orient,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+T& <b>grow_and</b>(T& polygon_set, orientation_2d orient,<br />
-unsigned_area_type low_bloating,<br>
+unsigned_area_type low_bloating,<br />
unsigned_area_type high_bloating)</font></td>
<td>Same as bloating non-overlapping regions and then applying self
@@ -473,8 +490,8 @@
intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
-T& <b>grow_and</b>(T& polygon_set, direction_2d dir,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+T& <b>grow_and</b>(T& polygon_set, direction_2d dir,<br />
unsigned_area_type bloating)</font></td>
<td>Same as bloating non-overlapping regions and then applying self
@@ -483,14 +500,14 @@
intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
-T& <b>grow_and</b>(T& polygon_set, <br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+T& <b>grow_and</b>(T& polygon_set, <br />
-unsigned_area_type west_bloating,<br>
+unsigned_area_type west_bloating,<br />
-unsigned_area_type east_bloating,<br>
+unsigned_area_type east_bloating,<br />
-unsigned_area_type south_bloating,<br>
+unsigned_area_type south_bloating,<br />
unsigned_area_type north_bloating)</font></td>
<td>Same as bloating non-overlapping regions and then applying self
@@ -499,28 +516,28 @@
intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon_set, unsigned_area_type factor)</font></td>
<td>Scales geometry up by unsigned factor. O( n log n) runtime
complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon_set, unsigned_area_type factor)</font></td>
<td>Scales geometry down by unsigned factor. O( n log n) runtime
complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, typename scaling_type><br>
-T& <b>scale</b>(polygon_set_type& polygon_set, <br>
+ <td width="586"><font face="Courier New">template <typename T, typename scaling_type><br />
+T& <b>scale</b>(polygon_set_type& polygon_set, <br />
const scaling_type& scaling)</font></td>
<td>Scales geometry by applying scaling.scale() on all vertices.
O( n log n) runtime complexity and O(n) memory wrt vertices +
intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, typename coord_type><br>
-T& <b>move</b>(T& polygon_set,<br>
+ <td width="586"><font face="Courier New">template <typename T, typename coord_type><br />
+T& <b>move</b>(T& polygon_set,<br />
orientation_2d orient, coord_type
displacement)</font></td>
<td>Moves geometry by displacement amount in the orientation.
@@ -528,40 +545,40 @@
intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, typename coord_type><br>
-T& <b>move</b>(T& polygon_set, coord_type x_displacement, <br>
+ <td width="586"><font face="Courier New">template <typename T, typename coord_type><br />
+T& <b>move</b>(T& polygon_set, coord_type x_displacement, <br />
coord_type y_displacement)</font></td>
<td>Moves the geometry by x_dispacement in x and y_displacement in y.
Note: for consistency should be convolve(polygon_set, point). O( n
log n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, typename transformation_type><br>
-T& <b>transform</b>(T& polygon_set,<br>
+ <td width="586"><font face="Courier New">template <typename T, typename transformation_type><br />
+T& <b>transform</b>(T& polygon_set,<br />
const
transformation_type& transformation)</font></td>
<td>Applies transformation.transform() on all vertices. O( n log
n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
-T& <b>keep</b>(T& polygon_set, <br>
- unsigned_area_type min_area,<br>
- unsigned_area_type max_area,<br>
- unsigned_area_type min_width,<br>
- unsigned_area_type max_width,<br>
- unsigned_area_type min_height,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+T& <b>keep</b>(T& polygon_set, <br />
+ unsigned_area_type min_area,<br />
+ unsigned_area_type max_area,<br />
+ unsigned_area_type min_width,<br />
+ unsigned_area_type max_width,<br />
+ unsigned_area_type min_height,<br />
unsigned_area_type max_height)</font></td>
<td>Retains only regions that satisfy the min/max criteria in the
argument list. Note: useful for visualization to cull too small
polygons. O( n log n) runtime complexity and O(n) memory wrt
vertices + intersections. </td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon 90 Set Data Object</h1>
<p>
-<p>The polygon 90 set data type encapsulates the internal data format that
+</p><p>The polygon 90 set data type encapsulates the internal data format that
serves as the input to the sweep-line algorithm that implements polygon-clipping
boolean operations. It also internally keeps track of whether that data
has been sorted or scanned and maintains the invariant that when its flags
@@ -572,15 +589,15 @@
maintain the data is sorted form rather than going all the way out to polygons
then resorting those vertices for a subsequent operation.</p>
<p>The declaration of Polygon 90 Set Data is the following:</p>
-<p><font face="Courier New">template <typename T><br>
+<p><font face="Courier New">template <typename T><br />
class polygon_90_set_data;</font></p>
<p>The class is parameterized on the coordinate data type. Algorithms that
benefit from knowledge of the invariants enforced by the class are implemented
as member functions to provide them access to information about those
invariants. </p>
<h2>Member Functions</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New"><b>polygon_90_set_data</b>()</font></td>
<td>Default constructor. Scanning orientation defaults to
HORIZONTAL</td>
@@ -591,9 +608,9 @@
<td>Construct with scanning orientation.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename iT><br>
- <b>polygon_90_set_data</b>(orientation_2d orient, <br> iT input_begin, iT
- input_end)</font></td>
+ <td width="586"><font face="Courier New">template <typename iT><br />
+ <b>polygon_90_set_data</b>(orientation_2d orient, <br />
+iT input_begin, iT input_end)</font></td>
<td>Construct with scanning orientation from an iterator range of
insertable objects.</td>
</tr>
@@ -604,7 +621,7 @@
</tr>
<tr>
<td width="586">
-<font face="Courier New">template <typename l, typename r, typename op><br>
+<font face="Courier New">template <typename l, typename r, typename op><br />
<b>polygon_90_set_data</b>(const polygon_90_set_view<l,r,op>&
t)</font></td>
<td>Copy construct from a Boolean operator template.</td>
@@ -612,33 +629,33 @@
<tr>
<td width="586">
<font face="Courier New">
-<b>polygon_90_set_data</b>(orientation_2d orient, <br> const polygon_90_set_data&
-that)</font></td>
+<b>polygon_90_set_data</b>(orientation_2d orient, <br />
+const polygon_90_set_data& that)</font></td>
<td>Construct with scanning orientation and copy from another polygon
set.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">polygon_90_set_data& <br><b>operator=</b>(const polygon_90_set_data& that)</font></td>
+<font face="Courier New">polygon_90_set_data& <br /><b>operator=</b>(const polygon_90_set_data& that)</font></td>
<td>Assignment from another polygon set, may change scanning
orientation.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">template <typename l, typename r, typename op><br>
-polygon_90_set_data& <br><b>operator=</b>(const polygon_90_set_view<l, r,
+<font face="Courier New">template <typename l, typename r, typename op><br />
+polygon_90_set_data& <br /><b>operator=</b>(const polygon_90_set_view<l, r,
op>& that)</font></td>
<td>Assignment from a Boolean operator template.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename geometry_object><br>
+ <td width="586"><font face="Courier New">template <typename geometry_object><br />
polygon_90_set_data& <b>operator=</b>(const geometry_object& geo)</font></td>
<td>Assignment from an insertable object.</td>
</tr>
<tr>
<td width="586">
<font face="Courier New">
-template <typename iT><br>
+template <typename iT><br />
void <b>insert</b>(iT input_begin, iT input_end)</font></td>
<td>Insert objects of an iterator range. Linear wrt. inserted
vertices.</td>
@@ -652,8 +669,8 @@
<tr>
<td width="586">
<font face="Courier New">
-template <typename geometry_type><br>
-void <b>insert</b>(const geometry_type& geometry_object, <br> bool is_hole
+template <typename geometry_type><br />
+void <b>insert</b>(const geometry_type& geometry_object, <br /> bool is_hole
= false)</font></td>
<td>Insert a geometry object, if is_hole is true then the inserted
region is subtractive rather than additive. Linear wrt. inserted
@@ -661,7 +678,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get</b>(output_container& output) const</font></td>
<td>Expects a standard container of geometry objects. Will scan
and eliminate overlaps. Converts polygon set geometry to objects
@@ -674,7 +691,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get_polygons</b>(output_container& output) const</font></td>
<td>Expects a standard container of polygon objects. Will scan and
eliminate overlaps. Converts polygon set geometry to polygons and
@@ -685,7 +702,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get_rectangles</b>(output_container& output) const</font></td>
<td>Expects a standard container of rectangle objects. Will scan
and eliminate overlaps. Slices polygon set geometry to rectangles
@@ -696,8 +713,8 @@
<tr>
<td width="586">
<font face="Courier New">
-template <typename output_container><br>
-void <b>get_rectangles</b>(output_container& output, <br> orientation_2d
+template <typename output_container><br />
+void <b>get_rectangles</b>(output_container& output, <br /> orientation_2d
slicing_orientation) const </font>
</td>
<td>Expects a standard container of rectangle objects. Will scan
@@ -750,9 +767,9 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename input_iterator_type><br>
-void <b>set</b>(input_iterator_type input_begin, <br> input_iterator_type input_end,
-<br> orientation_2d orient) </font>
+template <typename input_iterator_type><br />
+void <b>set</b>(input_iterator_type input_begin, <br /> input_iterator_type input_end,
+<br /> orientation_2d orient) </font>
</td>
<td>Overwrite geometry in polygon set with insertable objects in the
iterator range. Also sets the scanning orientation to that
@@ -760,7 +777,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename rectangle_type><br>
+template <typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& extents_rectangle) const</font></td>
<td>Given an object that models rectangle, scans and eliminates overlaps
in the polygon set because subtractive regions may alter its extents
@@ -770,12 +787,12 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-polygon_90_set_data&<br>
-<b>bloat</b>(unsigned_area_type west_bloating,<br>
+polygon_90_set_data&<br />
+<b>bloat</b>(unsigned_area_type west_bloating,<br />
-unsigned_area_type east_bloating,<br>
+unsigned_area_type east_bloating,<br />
-unsigned_area_type south_bloating,<br>
+unsigned_area_type south_bloating,<br />
unsigned_area_type north_bloating) </font></td>
<td>Scans to eliminate overlaps and subtractive regions. Inserts
@@ -786,12 +803,12 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-polygon_90_set_data&<br>
-<b>shrink</b>(unsigned_area_type west_shrinking,<br>
+polygon_90_set_data&<br />
+<b>shrink</b>(unsigned_area_type west_shrinking,<br />
-unsigned_area_type east_shrinking,<br>
+unsigned_area_type east_shrinking,<br />
-unsigned_area_type south_shrinking,<br>
+unsigned_area_type south_shrinking,<br />
unsigned_area_type north_shrinking)</font></td>
<td>Scans to eliminate overlaps and subtractive regions. Inserts
@@ -804,24 +821,24 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-polygon_90_set_data&<br>
-<b>resize</b>(coordinate_type west, coordinate_type east, <br> coordinate_type south, coordinate_type north)</font></td>
+polygon_90_set_data&<br />
+<b>resize</b>(coordinate_type west, coordinate_type east, <br /> coordinate_type south, coordinate_type north)</font></td>
<td>Call bloat or shrink or shrink then bloat depending on whether the
resizing values are positive or negative. O( n log n) runtime
complexity and O(n) memory wrt vertices + intersections.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">
-polygon_90_set_data& <b>move</b>(coordinate_type x_delta, <br> coordinate_type
-y_delta) </font>
+polygon_90_set_data& <b>move</b>(coordinate_type x_delta, <br />
+coordinate_type y_delta) </font>
</td>
<td>Add x_delta to x values and y_delta to y values of vertices stored
within the polygon set. Linear wrt. vertices.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename transformation_type><br>
-polygon_90_set_data& <br><b>transform</b>(const transformation_type& transformation) </font>
+template <typename transformation_type><br />
+polygon_90_set_data& <br /><b>transform</b>(const transformation_type& transformation) </font>
</td>
<td>Applies transformation.transform() on vertices stored within the
polygon set. Linear wrt. vertices.</td>
@@ -835,14 +852,14 @@
<tr>
<td width="586">
<p><font face="Courier New">polygon_90_set_data& <b>scale_down</b>(unsigned_area_type
-factor)</font> </td>
+factor)</font> </p></td>
<td>Scales vertices stored within the polygon set down by factor.
Linear wrt. vertices.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename scaling_type><br>
-polygon_90_set_data&<br> <b>scale</b>(const anisotropic_scale_factor<scaling_type>&
+template <typename scaling_type><br />
+polygon_90_set_data&<br /> <b>scale</b>(const anisotropic_scale_factor<scaling_type>&
f)</font></td>
<td>Scales vertices stored within the polygon set by applying f.scale().
Linear wrt. vertices.</td>
@@ -865,23 +882,23 @@
intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">polygon_90_set_data&<br> <b>interact</b>(const polygon_90_set_data& that)</font></td>
+ <td width="586"><font face="Courier New">polygon_90_set_data&<br /> <b>interact</b>(const polygon_90_set_data& that)</font></td>
<td>Retain only regions that touch or overlap regions in argument.
O( n log n) runtime complexity and O(n) memory wrt vertices +
intersections.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table4">
+<table class="docinfo" id="table4" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -894,6 +911,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon 90 With Holes Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon 90 With Holes Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,103 +39,118 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon 90 With Holes Concept</h1>
<p>
-<p>The polygon_90_with_holes concept tag is <font face="Courier New">
+</p><p>The polygon_90_with_holes concept tag is <font face="Courier New">
polygon_90_with_holes_concept</font></p>
<p>
To register a user defined type as a model of
<font face="Times New Roman">polygon_90_with_holes </font>concept, specialize the
geometry concept meta-function for that type. In the example below CPolygon90WithHoles is registered as a model of
-polygon<font face="Times New Roman">_90_with_holes </font> concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CPolygon90WithHoles> { typedef polygon_90_with_holes_concept type; };</font><p>
+polygon<font face="Times New Roman">_90_with_holes </font> concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CPolygon90WithHoles> { typedef polygon_90_with_holes_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of a polygon_90_with_holes is a
polygon_90 that it can provide iterators over holes that are also polygon_90.
A mutable polygon_90_with_holes must also be able to set its geometry based on
an interator range over polygon_90 holes. There is no convention of
-winding of holes enforced within the library. </font><p>
+winding of holes enforced within the library. </font></p><p>
<font face="Times New Roman">Below is shown the default polygon with holes
traits. Specialization of these traits is required for types that don't
-conform to the default behavior.</font><p><font face="Courier New">template <typename
-T, typename enable = void><br>
-struct polygon_with_holes_traits {<br>
+conform to the default behavior.</font></p><p><font face="Courier New">template <typename
+T, typename enable = void><br />
+struct polygon_with_holes_traits {<br />
typedef typename T::iterator_holes_type
-iterator_holes_type;<br>
- typedef typename T::hole_type hole_type;<br>
+iterator_holes_type;<br />
+ typedef typename T::hole_type hole_type;<br />
static inline iterator_holes_type begin_holes(const T&
-t) {<br>
- return t.begin_holes();<br>
- }<br>
+t) {<br />
+ return t.begin_holes();<br />
+ }<br />
static inline iterator_holes_type end_holes(const T& t)
-{<br>
- return t.end_holes();<br>
- }<br>
- static inline unsigned int size_holes(const T& t) {<br>
- return t.size_holes();<br>
- }<br>
+{<br />
+ return t.end_holes();<br />
+ }<br />
+ static inline unsigned int size_holes(const T& t) {<br />
+ return t.size_holes();<br />
+ }<br />
};</font></p>
-<p><font face="Courier New">template <typename T, typename enable = void><br>
-struct polygon_with_holes_mutable_traits {<br>
- template <typename iT><br>
+<p><font face="Courier New">template <typename T, typename enable = void><br />
+struct polygon_with_holes_mutable_traits {<br />
+ template <typename iT><br />
static inline T& set_holes(T& t, iT inputBegin, iT
-inputEnd) {<br>
+inputEnd) {<br />
t.set_holes(inputBegin,
-inputEnd);<br>
- return t;<br>
- }<br>
+inputEnd);<br />
+ return t;<br />
+ }<br />
};</font></p>
<p>An object that is a model of <font face="Courier New">
polygon_90_with_holes_concept</font> can be viewed as a model of any of its
refinements if it is determined at runtime to conform to the restriction of
those concepts. This concept casting is accomplished through the
<font face="Courier New">view_as<>()</font> function.</p>
-<p><font face="Courier New">view_as<rectangle_concept>(polygon_90_with_holes_object)</font><br>
+<p><font face="Courier New">view_as<rectangle_concept>(polygon_90_with_holes_object)</font><br />
<font face="Courier New">view_as<polygon_90_concept>(polygon_90_with_holes_object)</font></p>
<p>The return value of <font face="Courier New">view_as<>()</font> can be
passed into any interface that expects an object of the conceptual type
specified in its template parameter.</p>
<h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
compact_iterator_type <b>begin_compact</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_90.
Returns the begin iterator over the range of coordinates that correspond
to horizontal and vertical edges.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
compact_iterator_type <b>end_compact</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_90.
Returns the end iterator over the range of coordinates that correspond
to horizontal and vertical edges.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>begin_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_90_with_holes.
@@ -140,7 +158,7 @@
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>end_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_90_with_holes.
@@ -148,7 +166,7 @@
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
hole_iterator_type <b>begin_holes</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_90_with_holes.
@@ -156,7 +174,7 @@
to horizontal and vertical edges.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
hole_iterator_type <b>end_</b><b>holes</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_90_with_holes.
@@ -165,7 +183,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_compact</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_90_with_holes.
@@ -174,7 +192,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_points</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_90_with_holes.
@@ -184,14 +202,14 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_holes</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of
polygon_90_with_holes.
Sets the polygon holes to the hole data range [b,e)</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
unsigned int <b>size</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Returns the number of edges in the
outer shell of the polygon_90_with_holes. Does not include sizes
@@ -199,7 +217,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models polygon_90_with_holes or
one of its refinements into left object
@@ -207,8 +225,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- bool <b>contains</b>(const T&, const point_type& point, <br>
+ typename point_type><br />
+ bool <b>contains</b>(const T&, const point_type& point, <br />
bool consider_touch=true)</font></td>
<td>Given an object that models polygon_90_with_holes and an object that models
@@ -219,86 +237,85 @@
the polygon or one of its holes.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br>
- template <typename T, typename point_type><br>
+ <td width="586"><font face="Courier New">// get the center coordinate<br />
+ template <typename T, typename point_type><br />
void <b>center</b>(point_type& p, const T& polygon)</font></td>
<td>Sets object that models point to the center point of the bounding
box of an object that models polygon_90_with_holes.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename rectangle_type><br>
+ typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& bbox, const T& polygon)</font></td>
<td>Sets object that models rectangle to the bounding box of an object
that models polygon_90_with_holes and returns true. Returns false
and leaves bbox unchanged if polygon is empty.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
manhattan_area_type <b>area</b>(const T& polygon)</font></td>
<td>Returns the area of an object
that models polygon_90_with_holes including subtracting the area of its
holes from the area of the outer shell polygon.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
direction_1d <b>winding</b>(const T& polygon)</font></td>
<td>Returns the winding direction of an object
that models polygon_90_with_holes, LOW == CLOCKWISE, HIGH =
COUNTERCLOCKWISE.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_difference <b>perimeter</b>(const T& polygon)</font></td>
<td>Returns the perimeter length of an object
that models polygon_90, including the perimeters of the holes.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename transform_type><br>
+ typename transform_type><br />
T& <b>transform</b>(T& polygon, const transform_type&)</font></td>
<td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
transforming its vertices. Also applies transform() on the holes
of the polygon.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales up outer shell and holes of an object that models
polygon_90 by unsigned factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales down outer shell and holes of an object that models
polygon_90 by unsigned factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, scaling_type><br>
+ <td width="586"><font face="Courier New">template <typename T, scaling_type><br />
T& <b>scale</b>(T& rectangle, double scaling) </font></td>
<td>Scales outer shell and holes of an object that models polygon_90 by
floating point factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>move</b>(T& polygon, orientation_2d,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>move</b>(T& polygon, orientation_2d,<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to coordinate indicated by orientation_2d of
vertices of an object that models polygon_90 .</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br>
- polygon_type& <b>convolve</b>(polygon_type& polygon,<br>
-
- const point_type& point)</font></td>
+ <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br />
+ polygon_type& <b>convolve</b>(polygon_type& polygon,<br />
+const point_type& point)</font></td>
<td>Convolves coordinate values of point with the outer shell and holes of an
object that models polygon_90_with_holes.</td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon 90 With Holes Data</h1>
<p>
-<p>The library provides a model of polygon 90 with holes concept declared
+</p><p>The library provides a model of polygon 90 with holes concept declared
<font face="Courier New">
template<typename T> polygon_90_with_holes_data </font>where T is the
coordinate type.</p>
@@ -307,8 +324,8 @@
library polygon data type instead of providing their own. The data type is
implemented to be convenient to use with the library traits.</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">polygon_90_with_holes_concept</font></td>
</tr>
@@ -343,12 +360,12 @@
</tr>
<tr>
<td width="586"><font face="Courier New">polygon_90_with_holes_data& <b>
- <br>operator=</b>(const polygon_90_with_holes_data& that)</font></td>
+ <br />operator=</b>(const polygon_90_with_holes_data& that)</font></td>
<td>Assignment operator.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b> </b>polygon_90_with_holes_data&<b>
- <br> operator=</b>(const T2& that) const</font></td>
+ <br /> operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of polygon 90 with holes.</td>
</tr>
<tr>
@@ -396,14 +413,14 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
<td>Sets the polygon to the iterator range of points. No check is
performed to ensure the points describe a Manhattan figure, every other
x and y value of the points is used to initialize the polygon.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set_compact</b>(iT begin_coords, iT end_coords)</font></td>
+ <br /> </b>void <b>set_compact</b>(iT begin_coords, iT end_coords)</font></td>
<td>Sets the polygon to the iterator range of coordinates. These
coordinates correspond to the x values of vertical edges and y values of
horizontal edges. It is expected that the sequence start with an x
@@ -411,24 +428,24 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
+ <br /> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
<td>Sets the polygon holes the iterator range of hole polygons. These
polygons in the input range may be either polygon_90_data or
polygon_90_with_holes_data or any type that provides begin_compact and
end_compact member functions.</td>
</tr>
-</table>
- <tr>
+</tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table3">
+<table class="docinfo" id="table3" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -441,6 +458,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,40 +39,55 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon Concept</h1>
<p>
-<p>The polygon concept tag is <font face="Courier New">
+</p><p>The polygon concept tag is <font face="Courier New">
polygon_concept</font></p>
<p>
To register a user defined type as a model of
<font face="Times New Roman">polygon </font>concept, specialize the
geometry concept meta-function for that type. In the example below CPolygon is registered as a model of
-polygon concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CPolygon> { typedef polygon_concept type; };</font><p>
+polygon concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CPolygon> { typedef polygon_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of a polygon is that it can provide
iterators over the points that represent its vertices. It is acceptable to
have the last edge explict with the first and last point equal to each other or
@@ -79,53 +97,53 @@
>
could be made models of polygon_concept by simply providing access to their
iterators through traits. Library functions that create polygon objects
-require that those objects provide a default constructor.</font><p>
+require that those objects provide a default constructor.</font></p><p>
<font face="Times New Roman">Below is shown the default polygon traits.
Specialization of these traits is required for types that don't conform to the
default behavior. Note that these same traits are also used by several
other polygon concepts through SFINE enable template parameter. The SFINE
enable parameter also allows the library to provide default specialization that
-work for any object that models the 90 degree polygon concepts.</font><p>
-<font face="Courier New">template <typename T, typename enable = gtl_yes><br>
-struct polygon_traits {};<br>
-<br>
-template <typename T><br>
-struct polygon_traits<T, <br>
- typename gtl_or_4<<br>
+work for any object that models the 90 degree polygon concepts.</font></p><p>
+<font face="Courier New">template <typename T, typename enable = gtl_yes><br />
+struct polygon_traits {};<br />
+<br />
+template <typename T><br />
+struct polygon_traits<T, <br />
+ typename gtl_or_4<<br />
typename gtl_same_type<typename geometry_concept<T>::type,
-polygon_concept>::type,<br>
+polygon_concept>::type,<br />
typename gtl_same_type<typename geometry_concept<T>::type,
-polygon_concept>::type,<br>
+polygon_concept>::type,<br />
typename gtl_same_type<typename geometry_concept<T>::type,
-polygon_with_holes_concept>::type,<br>
+polygon_with_holes_concept>::type,<br />
typename gtl_same_type<typename geometry_concept<T>::type,
-polygon_with_holes_concept>::type<br>
- >::type> {<br>
- typedef typename T::coordinate_type coordinate_type;<br>
- typedef typename T::iterator_type iterator_type;<br>
- typedef typename T::point_type point_type;<br>
- static inline iterator_type begin_points(const T& t) {<br>
- return t.begin();<br>
- }<br>
- static inline iterator_type end_points(const T& t) {<br>
- return t.end();<br>
- }<br>
- static inline unsigned int size(const T& t) {<br>
- return t.size();<br>
- }<br>
- static inline winding_direction winding(const T& t) {<br>
- return unknown_winding;<br>
- }<br>
+polygon_with_holes_concept>::type<br />
+ >::type> {<br />
+ typedef typename T::coordinate_type coordinate_type;<br />
+ typedef typename T::iterator_type iterator_type;<br />
+ typedef typename T::point_type point_type;<br />
+ static inline iterator_type begin_points(const T& t) {<br />
+ return t.begin();<br />
+ }<br />
+ static inline iterator_type end_points(const T& t) {<br />
+ return t.end();<br />
+ }<br />
+ static inline unsigned int size(const T& t) {<br />
+ return t.size();<br />
+ }<br />
+ static inline winding_direction winding(const T& t) {<br />
+ return unknown_winding;<br />
+ }<br />
};</font></p>
-<p><font face="Courier New">template <typename T, typename enable = void><br>
-struct polygon_mutable_traits {<br>
- template <typename iT><br>
+<p><font face="Courier New">template <typename T, typename enable = void><br />
+struct polygon_mutable_traits {<br />
+ template <typename iT><br />
static inline T& set_points(T& t, iT input_begin, iT
-input_end) {<br>
+input_end) {<br />
t.set(input_begin,
-input_end);<br>
- return t;<br>
- }<br>
+input_end);<br />
+ return t;<br />
+ }<br />
};</font></p>
<p>Example code custom_polygon.cpp
demonstrates mapping a
@@ -135,23 +153,23 @@
refinements if it is determined at runtime to conform to the restriction of
those concepts. This concept casting is accomplished through the
<font face="Courier New">view_as<>()</font> function.</p>
-<p><font face="Courier New">view_as<rectangle_concept>(polygon_object)</font><br>
-<font face="Courier New">view_as<polygon_90_concept>(polygon_object)</font><br>
+<p><font face="Courier New">view_as<rectangle_concept>(polygon_object)</font><br />
+<font face="Courier New">view_as<polygon_90_concept>(polygon_object)</font><br />
<font face="Courier New">view_as<polygon_45_concept>(polygon_object)</font></p>
<p>The return value of <font face="Courier New">view_as<>()</font> can be
passed into any interface that expects an object of the conceptual type
specified in its template parameter. </p>
<h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>begin_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon.
Returns the begin iterator over the range of points that correspond to
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>end_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon.
Returns the end iterator over the range of points that correspond to
@@ -159,29 +177,29 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_points</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of polygon.
Sets the polygon to the point data range [b,e) that corresponds to
vertices of a manhattan polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
unsigned int <b>size</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Returns the number of edges in the
polygon.</font></td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models polygon into left object
that models polygon.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- bool <b>contains</b>(const T&, const point_type& point, <br>
+ typename point_type><br />
+ bool <b>contains</b>(const T&, const point_type& point, <br />
bool consider_touch=true)</font></td>
<td>Given an object that models polygon and an object that models
@@ -191,84 +209,83 @@
the polygon. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br>
- template <typename T, typename point_type><br>
+ <td width="586"><font face="Courier New">// get the center coordinate<br />
+ template <typename T, typename point_type><br />
void <b>center</b>(point_type& p, const T& polygon)</font></td>
<td>Sets object that models point to the center point of the bounding
box of an object that models polygon. Linear wrt. vertices.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename rectangle_type><br>
+ typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& bbox, const T& polygon)</font></td>
<td>Sets object that models rectangle to the bounding box of an object
that models polygon and returns true. Returns false and leaves
bbox unchanged if polygon is empty. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
area_type <b>area</b>(const T& polygon)</font></td>
<td>Returns the area of an object
that models polygon. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
direction_1d <b>winding</b>(const T& polygon)</font></td>
<td>Returns the winding direction of an object
that models polygon, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.
Complexity depends upon winding trait.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_distance <b>perimeter</b>(const T& polygon)</font></td>
<td>Returns the perimeter length of an object
that models polygon. Linear wrt. vertices.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename transform_type><br>
+ typename transform_type><br />
T& <b>transform</b>(T& polygon, const transform_type&)</font></td>
<td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
transforming its vertices. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales up coordinate of an object that models
polygon by unsigned factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales down coordinates of an object that models
polygon by unsigned factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, scaling_type><br>
+ <td width="586"><font face="Courier New">template <typename T, scaling_type><br />
T& <b>scale</b>(T& rectangle, double scaling) </font></td>
<td>Scales coordinates of an object that models polygon by floating
point factor. Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>move</b>(T& polygon, orientation_2d,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>move</b>(T& polygon, orientation_2d,<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to coordinate indicated by orientation_2d of
vertices of an object that models polygon . Linear wrt. vertices.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br>
- polygon_type& <b>convolve</b>(polygon_type& polygon,<br>
-
- const point_type& point)</font></td>
+ <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br />
+ polygon_type& <b>convolve</b>(polygon_type& polygon,<br />
+const point_type& point)</font></td>
<td>Convolves coordinate values of point with vertices of an
object that models polygon. Linear wrt. vertices.</td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon Data</h1>
<p>
-<p>The library provides a model of polygon concept declared
+</p><p>The library provides a model of polygon concept declared
<font face="Courier New">
template<typename T> polygon_data </font>where T is the coordinate type.</p>
<p>This data type is used internally when a polygon is needed and is available
@@ -279,8 +296,8 @@
demonstrates using
the library provided polygon data types and functions</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">polygon_concept</font></td>
</tr>
@@ -308,7 +325,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>polygon_data& <b>operator=</b>(const T2& that) const</font></td>
+ <br /> </b>polygon_data& <b>operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of polygon.</td>
</tr>
<tr>
@@ -328,21 +345,21 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
<td>Sets the polygon to the iterator range of points. </td>
</tr>
-</table>
- <tr>
+</tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table3">
+<table class="docinfo" id="table3" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -355,6 +372,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_set_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_set_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_set_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon Set Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon Set Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,32 +39,47 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon Set Concept</h1>
<p>
-<p>The polygon_set concept tag is <font face="Courier New">
+</p><p>The polygon_set concept tag is <font face="Courier New">
polygon_set_concept</font></p>
<p>
<font face="Times New Roman">The semantic of a polygon_set is zero or more
@@ -69,9 +87,14 @@
coordinates, but a snap rounding distance of one integer unit will still be
applied, furthermore, geometry outside the domain where one integer unit is
sufficient to provide robustness may lead to undefined behavior in algorithms.
-It is recommended to use 32-bit integer coordinates for robust operations.
-
-</font><p>Users are recommended to use std::vector and std::list of user defined polygons
+It is recommended to use integer coordinates for robust operations. In the
+case that data represented contains only Manhattan geometry a runtime check will
+default to the Manhattan algorithm. The results of which are identical to
+what the general algorithm would do, but obtained more efficiently. In the
+case that the data represented contains only Manhattan and 45-degree geometry a
+runtime check will default to the faster 45-degree algorithm. The results
+of which may differ slight from what the general algorithm would do because
+non-integer intersections will be handled differently.</font></p><p>Users are recommended to use std::vector and std::list of user defined polygons
or library provided polygon_set_data<coordinate_type> objects. Lists
and vectors of models of polygon_concept or polygon_with_holes_concept are automatically models of polygon_set_concept.</p>
<p>Example code custom_polygon_set.cpp
@@ -82,7 +105,7 @@
polygon_45_set_concept</font> if it is determined at runtime to conform to the
restrictions of those concepts. This concept casting is accomplished
through the <font face="Courier New">view_as<>()</font> function.</p>
-<p><font face="Courier New">view_as<polygon_90_set_concept>(polygon_set_object)<br>
+<p><font face="Courier New">view_as<polygon_90_set_concept>(polygon_set_object)<br />
view_as<polygon_45_set_concept>(polygon_set_object)</font></p>
<p>The return value of <font face="Courier New">view_as<>()</font> can be passed
into any interface that expects an object of the conceptual type specified in
@@ -97,10 +120,10 @@
eliminate temp copies of intermediate results when Boolean operators are chained
together.</p>
<p>Operators are declared inside the namespace <font face="Courier New">boost::polygon::operators</font>.</p>
-<table border="1" width="100%" id="table5">
- <tr>
+<table id="table5" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_set_view <b>operator</b>|(const T1& l, const T2& r)</font></td>
<td>Boolean OR operation (polygon set union). Accepts two objects
that model polygon_set or one of its refinements. Returns an
@@ -111,7 +134,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_set_view <b>operator</b>+(const T1& l, const T2& r)</font></td>
<td>Same as operator|. The plus sign is also used for OR
operations in Boolean logic expressions. Expected n log n runtime,
@@ -119,7 +142,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_set_view <b>operator</b>&(const T1& l, const T2& r)</font></td>
<td>Boolean AND operation (polygon set intersection). Accepts two
objects that model polygon_set or one of its refinements. Expected
@@ -128,7 +151,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_set_view <b>operator</b>*(const T1& l, const T2& r)</font></td>
<td>Same as operator&. The multiplication symbol is also used for
AND operations in Boolean logic expressions. Expected n log n
@@ -136,7 +159,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_set_view <b>operator</b>^(const T1& l, const T2& r)</font></td>
<td>Boolean XOR operation (polygon set disjoint-union). Accepts
two objects that model polygon_set or one of its refinements.
@@ -145,7 +168,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
polygon_set_view <b>operator</b>-(const T1& l, const T2& r)</font></td>
<td>Boolean SUBTRACT operation (polygon set difference). Accepts
two objects that model polygon_set or one of its refinements.
@@ -154,7 +177,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>|=(const T1& l, const T2& r)</font></td>
<td>Same as operator|, but with self assignment, left operand must model
polygon_set and not one of it's refinements. Expected n log n
@@ -162,7 +185,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>+=(T1& l, const T2& r)</font></td>
<td>Same as operator+, but with self assignment, left operand must model
polygon_set and not one of it's refinements. Expected n log n
@@ -170,7 +193,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>&=(const T1& l, const T2& r)</font></td>
<td>Same as operator&, but with self assignment, left operand must model
polygon_set and not one of it's refinements. Expected n log n
@@ -178,7 +201,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>*=(T1& l, const T2& r)</font></td>
<td>Same as operator*, but with self assignment, left operand must model
polygon_set and not one of it's refinements. Expected n log n
@@ -186,7 +209,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>^=(const T1& l, const T2& r)</font></td>
<td>Same as operator^, but with self assignment, left operand must model
polygon_set and not one of it's refinements. Expected n log n
@@ -194,14 +217,14 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>-=(T1& l, const T2& r)</font></td>
<td>Same as operator-, but with self assignment, left operand must model
polygon_set and not one of it's refinements. Expected n log n
runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T1><br>
+ <td width="586"><font face="Courier New">template <typename T1><br />
T1 <b>operator</b>+(const T1&, coordinate_type bloating)</font></td>
<td>Performs resize operation, inflating by bloating ammount. If
negative the result is a shrink instead of bloat. Note: returns
@@ -210,7 +233,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1 <b>operator</b>-(const T1&, coordinate_type shrinking)</font></td>
<td>Performs resize operation, deflating by bloating ammount. If
negative the result is a bloat instead of shrink. Note: returns
@@ -219,7 +242,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>+=(const T1&, coordinate_type bloating)</font></td>
<td>Performs resize operation, inflating by bloating ammount. If
negative the result is a shrink instead of bloat. Returns
@@ -228,19 +251,19 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>operator</b>-=(const T1&, coordinate_type shrinking)</font></td>
<td>Performs resize operation, deflating by bloating ammount. If
negative the result is a bloat instead of shrink. Returns
reference to modified argument. Expected n log n runtime, worst
case quadratic runtime wrt. vertices + intersections.</td>
</tr>
- </table>
+ </tbody></table>
<h2>Functions</h2>
-<table border="1" width="100%" id="table6">
- <tr>
+<table id="table6" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& lvalue, const T2& rvalue)</font></td>
<td>Eliminates overlaps in geometry and copies from an object that
models polygon_set or any of its refinements into an object that
@@ -249,7 +272,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
bool <b>equivalence</b>(const T1& lvalue, const T2& rvalue) </font></td>
<td>Returns true if an object that models polygon_set or one of its
refinements covers the exact same geometric regions as another object
@@ -259,8 +282,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- output_container_type, typename T><br>
- void <b>get_trapezoids</b>(output_container_type& output, <br>
+ output_container_type, typename T><br />
+ void <b>get_trapezoids</b>(output_container_type& output, <br />
const T& polygon_set)</font></td>
<td>Output container is expected to be a standard container.
@@ -273,10 +296,12 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- output_container_type, typename T><br>
- void <b>get_trapezoids</b>(output_container_type& output, <br>
+ output_container_type, typename T><br />
+ void <b>get_trapezoids</b>(output_container_type& output, <br />
- const T& polygon_set,<br> orientation_2d orient)</font></td>
+ const T& polygon_set,<br />
+
+orientation_2d orient)</font></td>
<td>Output container is expected to be a standard container.
Slices geometry of an object that models polygon_set or one of its
refinements into non overlapping trapezoids along a the specified slicing
@@ -287,13 +312,13 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- polygon_set_type><br>
+ polygon_set_type><br />
void <b>clear</b>(polygon_set_type& polygon_set)</font></td>
<td>Makes the object empty of geometry.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- polygon_set_type><br>
+ polygon_set_type><br />
bool <b>empty</b>(const polygon_set_type& polygon_set)</font></td>
<td>Checks whether the object is empty of geometry. Polygons that
are completely covered by holes will result in empty returning true.
@@ -302,8 +327,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- rectangle_type><br>
- bool <b>extents</b>(rectangle_type& extents_rectangle, <br>
+ rectangle_type><br />
+ bool <b>extents</b>(rectangle_type& extents_rectangle, <br />
const
T& polygon_set)</font></td>
<td>Computes bounding box of an object that models polygon_set and
@@ -314,21 +339,21 @@
intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
area_type <b>area</b>(const T& polygon_set)</font></td>
<td>Computes the area covered by geometry in an object that models
polygon_set. Expected n log n runtime, worst case quadratic
runtime wrt. vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>bloat</b>(T& polygon_set, unsigned_area_type bloating)</font></td>
<td>Same as getting all the polygons, bloating them and putting them
back. Expected n log n runtime, worst case quadratic runtime wrt.
vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>shrink</b>(T& polygon_set, unsigned_area_type shrinking)</font></td>
<td>Same as getting all the polygons, shrinking them and overwriting
the polygon set with the resulting regions. Expected n log n
@@ -336,10 +361,10 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- coord_type><br>
- T& <b>resize</b>(T& polygon_set, coord_type resizing,<br>
+ coord_type><br />
+ T& <b>resize</b>(T& polygon_set, coord_type resizing,<br />
- bool corner_fill_arc = false, <br>
+ bool corner_fill_arc = false, <br />
unsigned int num_circle_segments = 0)</font></td>
<td>Same as bloat if resizing is positive, same as shrink if resizing is
negative. Original topology at acute angle vertices is preserved
@@ -350,31 +375,20 @@
runtime wrt. vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, typename
- coord_type><br>
- T& <b>simplify</b>(T& polygon_set, distance_type
- threshold)</font></td>
- <td>Simplify the polygon set by removing vertices that lie
- within threshold distance of the line segment that
- connects the two adjacent points in the polygon.
- Expected n log n runtime, worst case quadratic
- runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon_set, unsigned_area_type factor)</font></td>
<td>Scales geometry up by unsigned factor. Expected n log n
runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon_set, unsigned_area_type factor)</font></td>
<td>Scales geometry down by unsigned factor. Expected n log n
runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, typename transformation_type><br>
-T& <b>transform</b>(T& polygon_set,<br>
+ <td width="586"><font face="Courier New">template <typename T, typename transformation_type><br />
+T& <b>transform</b>(T& polygon_set,<br />
const
transformation_type& transformation)</font></td>
<td>Applies transformation.transform() on all vertices. Expected n
@@ -382,24 +396,24 @@
intersections.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
-T& <b>keep</b>(T& polygon_set, <br>
- unsigned_area_type min_area,<br>
- unsigned_area_type max_area,<br>
- unsigned_area_type min_width,<br>
- unsigned_area_type max_width,<br>
- unsigned_area_type min_height,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+T& <b>keep</b>(T& polygon_set, <br />
+ unsigned_area_type min_area,<br />
+ unsigned_area_type max_area,<br />
+ unsigned_area_type min_width,<br />
+ unsigned_area_type max_width,<br />
+ unsigned_area_type min_height,<br />
unsigned_area_type max_height)</font></td>
<td>Retains only regions that satisfy the min/max criteria in the
argument list. Note: useful for visualization to cull too small
polygons. Expected n log n runtime, worst case quadratic runtime
wrt. vertices + intersections.</td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon Set Data Object</h1>
<p>
-<p>The polygon set data type encapsulates the internal data format that
+</p><p>The polygon set data type encapsulates the internal data format that
serves as the input to the sweep-line algorithm that implements polygon-clipping
Boolean operations. It also internally keeps track of whether that data
has been sorted or scanned and maintains the invariant that when its flags
@@ -410,7 +424,7 @@
maintain the data is sorted form rather than going all the way out to polygons
then resorting those vertices for a subsequent operation.</p>
<p>The declaration of Polygon Set Data is the following:</p>
-<p><font face="Courier New">template <typename T><br>
+<p><font face="Courier New">template <typename T><br />
class polygon_set_data;</font></p>
<p>The class is parameterized on the coordinate data type. Algorithms that
benefit from knowledge of the invariants enforced by the class are implemented
@@ -420,13 +434,13 @@
demonstrates using
the library provided polygon set data types and functions</p>
<h2>Member Functions</h2>
-<table border="1" width="100%" id="table7">
- <tr>
+<table id="table7" border="1" width="100%">
+ <tbody><tr>
<td width="586"><font face="Courier New"><b>polygon_set_data</b>()</font></td>
<td>Default constructor. </td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename iT><br>
+ <td width="586"><font face="Courier New">template <typename iT><br />
<b>polygon_set_data</b>(iT input_begin, iT
input_end)</font></td>
<td>Construct with scanning orientation from an iterator range of
@@ -439,33 +453,33 @@
</tr>
<tr>
<td width="586">
-<font face="Courier New">template <typename l, typename r, typename op><br>
+<font face="Courier New">template <typename l, typename r, typename op><br />
<b>polygon_set_data</b>(const polygon_set_view<l,r,op>&
t)</font></td>
<td>Copy construct from a Boolean operator template.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">polygon_set_data& <br><b>operator=</b>(const polygon_set_data& that)</font></td>
+<font face="Courier New">polygon_set_data& <br /><b>operator=</b>(const polygon_set_data& that)</font></td>
<td>Assignment from another polygon set, may change scanning
orientation.</td>
</tr>
<tr>
<td width="586">
-<font face="Courier New">template <typename l, typename r, typename op><br>
-polygon_set_data& <br><b>operator=</b>(const polygon_set_view<l, r,
+<font face="Courier New">template <typename l, typename r, typename op><br />
+polygon_set_data& <br /><b>operator=</b>(const polygon_set_view<l, r,
op>& that)</font></td>
<td>Assignment from a Boolean operator template.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename geometry_object><br>
+ <td width="586"><font face="Courier New">template <typename geometry_object><br />
polygon_set_data& <b>operator=</b>(const geometry_object& geo)</font></td>
<td>Assignment from an insertable object.</td>
</tr>
<tr>
<td width="586">
<font face="Courier New">
-template <typename iT><br>
+template <typename iT><br />
void <b>insert</b>(iT input_begin, iT input_end)</font></td>
<td>Insert objects of an iterator range. Linear wrt vertices
inserted.</td>
@@ -479,8 +493,8 @@
<tr>
<td width="586">
<font face="Courier New">
-template <typename geometry_type><br>
-void <b>insert</b>(const geometry_type& geometry_object, <br> bool is_hole
+template <typename geometry_type><br />
+void <b>insert</b>(const geometry_type& geometry_object, <br /> bool is_hole
= false)</font></td>
<td>Insert a geometry object, if is_hole is true then the inserted
region is subtractive rather than additive. Linear wrt vertices
@@ -488,7 +502,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get</b>(output_container& output) const</font></td>
<td>Expects a standard container of polygons objects. Will scan
and eliminate overlaps. Converts polygon set geometry to objects
@@ -505,7 +519,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename output_container><br>
+template <typename output_container><br />
void <b>get_trapezoids</b>(output_container& output) const</font></td>
<td>Expects a standard container of polygon objects. Will scan
and eliminate overlaps. Slices polygon set geometry to trapezoids
@@ -515,8 +529,8 @@
<tr>
<td width="586">
<font face="Courier New">
-template <typename output_container><br>
-void <b>get_trapezoids</b>(output_container& output, <br> orientation_2d
+template <typename output_container><br />
+void <b>get_trapezoids</b>(output_container& output, <br /> orientation_2d
slicing_orientation) const </font>
</td>
<td>Expects a standard container of polygon objects. Will scan
@@ -563,15 +577,15 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename input_iterator_type><br>
-void <b>set</b>(input_iterator_type input_begin, <br> input_iterator_type input_end) </font>
+template <typename input_iterator_type><br />
+void <b>set</b>(input_iterator_type input_begin, <br /> input_iterator_type input_end) </font>
</td>
<td>Overwrite geometry in polygon set with insertable objects in the
iterator range. </td>
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename rectangle_type><br>
+template <typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& extents_rectangle) const</font></td>
<td>Given an object that models rectangle, scans and eliminates overlaps
in the polygon set because subtractive regions may alter its extents
@@ -581,9 +595,9 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-polygon_set_data&<br>
-<b>resize</b>(coord_type resizing,<br>
- bool corner_fill_arc = false, <br>
+polygon_set_data&<br />
+<b>resize</b>(coord_type resizing,<br />
+ bool corner_fill_arc = false, <br />
unsigned int num_circle_segments = 0)</font></td>
<td>Inflates if resizing is positive, deflates if resizing is
negative. Original topology at acute angle vertices is preserved
@@ -597,8 +611,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename transformation_type><br>
-polygon_set_data& <br><b>transform</b>(const transformation_type& transformation) </font>
+template <typename transformation_type><br />
+polygon_set_data& <br /><b>transform</b>(const transformation_type& transformation) </font>
</td>
<td>Applies transformation.transform() on vertices stored within the
polygon set. Expected n log n runtime, worst case quadratic
@@ -621,25 +635,25 @@
</tr>
<tr>
<td width="586"><font face="Courier New">
-template <typename scaling_type><br>
-polygon_set_data&<br> <b>scale</b>(const scaling_type&
+template <typename scaling_type><br />
+polygon_set_data&<br /> <b>scale</b>(const scaling_type&
f)</font></td>
<td>Scales vertices stored within the polygon set by applying f.scale().
Expected n log n runtime, worst case quadratic runtime wrt. vertices +
intersections.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table8">
+<table class="docinfo" id="table8" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -652,6 +666,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_polygon_with_holes_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_polygon_with_holes_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_polygon_with_holes_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Polygon With Holes Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Polygon With Holes Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,115 +39,130 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Polygon With Holes Concept</h1>
<p>
-<p>The polygon_with_holes concept tag is <font face="Courier New">
+</p><p>The polygon_with_holes concept tag is <font face="Courier New">
polygon_with_holes_concept</font></p>
<p>
To register a user defined type as a model of
<font face="Times New Roman">polygon_with_holes </font>concept, specialize the
geometry concept meta-function for that type. In the example below
-CPolygonWithHoles is registered as a model of polygon<font face="Times New Roman">_with_holes </font> concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CPolygonWithHoles> { typedef polygon_with_holes_concept type; };</font><p>
+CPolygonWithHoles is registered as a model of polygon<font face="Times New Roman">_with_holes </font> concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CPolygonWithHoles> { typedef polygon_with_holes_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of a polygon_with_holes is a polygon
that it can provide iterators over holes that are also polygon. A mutable
polygon_with_holes must also be able to set its geometry based on an interator
range over polygon holes. There is no convention of winding of holes
-enforced within the library. </font><p>
+enforced within the library. </font></p><p>
<font face="Times New Roman">Below is shown the default polygon with holes
traits. Specialization of these traits is required for types that don't
conform to the default behavior. Note, these traits are used by all
-polygon with holes concepts.</font><p><font face="Courier New">template <typename
-T, typename enable = void><br>
-struct polygon_with_holes_traits {<br>
+polygon with holes concepts.</font></p><p><font face="Courier New">template <typename
+T, typename enable = void><br />
+struct polygon_with_holes_traits {<br />
typedef typename T::iterator_holes_type
-iterator_holes_type;<br>
- typedef typename T::hole_type hole_type;<br>
+iterator_holes_type;<br />
+ typedef typename T::hole_type hole_type;<br />
static inline iterator_holes_type begin_holes(const T&
-t) {<br>
- return t.begin_holes();<br>
- }<br>
+t) {<br />
+ return t.begin_holes();<br />
+ }<br />
static inline iterator_holes_type end_holes(const T& t)
-{<br>
- return t.end_holes();<br>
- }<br>
- static inline unsigned int size_holes(const T& t) {<br>
- return t.size_holes();<br>
- }<br>
+{<br />
+ return t.end_holes();<br />
+ }<br />
+ static inline unsigned int size_holes(const T& t) {<br />
+ return t.size_holes();<br />
+ }<br />
};</font></p>
-<p><font face="Courier New">template <typename T, typename enable = void><br>
-struct polygon_with_holes_mutable_traits {<br>
- template <typename iT><br>
+<p><font face="Courier New">template <typename T, typename enable = void><br />
+struct polygon_with_holes_mutable_traits {<br />
+ template <typename iT><br />
static inline T& set_holes(T& t, iT inputBegin, iT
-inputEnd) {<br>
+inputEnd) {<br />
t.set_holes(inputBegin,
-inputEnd);<br>
- return t;<br>
- }<br>
+inputEnd);<br />
+ return t;<br />
+ }<br />
};</font></p>
<p>An object that is a model of <font face="Courier New">
polygon_with_holes_concept</font> can be viewed as a model of any of its
refinements if it is determined at runtime to conform to the restriction of
those concepts. This concept casting is accomplished through the
<font face="Courier New">view_as<>()</font> function.</p>
-<p><font face="Courier New">view_as<rectangle_concept>(polygon_with_holes_object)</font><br>
-<font face="Courier New">view_as<polygon_90_concept>(polygon_with_holes_object)</font><br>
-<font face="Courier New">view_as<polygon_90_with_holes_concept>(polygon_with_holes_object)</font><br>
-<font face="Courier New">view_as<polygon_45_concept>(polygon_with_holes_object)</font><br>
-<font face="Courier New">view_as<polygon_45_with_holes_concept>(polygon_with_holes_object)</font><br>
+<p><font face="Courier New">view_as<rectangle_concept>(polygon_with_holes_object)</font><br />
+<font face="Courier New">view_as<polygon_90_concept>(polygon_with_holes_object)</font><br />
+<font face="Courier New">view_as<polygon_90_with_holes_concept>(polygon_with_holes_object)</font><br />
+<font face="Courier New">view_as<polygon_45_concept>(polygon_with_holes_object)</font><br />
+<font face="Courier New">view_as<polygon_45_with_holes_concept>(polygon_with_holes_object)</font><br />
<font face="Courier New">view_as<polygon_concept>(polygon_with_holes_object)</font></p>
<p>The return value of <font face="Courier New">view_as<>()</font> can be
passed into any interface that expects an object of the conceptual type
specified in its template parameter. </p>
<h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>begin_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_with_holes.
Returns the begin iterator over the range of points that correspond to
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_iterator_type <b>end_points</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_with_holes.
Returns the end iterator over the range of points that correspond to
vertices of the polygon.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
hole_iterator_type <b>begin_holes</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_with_holes.
Returns the begin iterator over the range of coordinates that correspond
to horizontal and vertical edges.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
hole_iterator_type <b>end_holes</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_with_holes.
Returns the end iterator over the range of coordinates that correspond
@@ -152,7 +170,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_points</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_with_holes.
Sets the polygon to the point data range [b,e) that corresponds to
@@ -160,13 +178,13 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- iterator><br>
+ iterator><br />
void <b>set_holes</b>(T& polygon, iterator b, iterator e)</font></td>
<td><font face="Times New Roman">Expects a model of polygon_with_holes.
Sets the polygon holes to the hole data range [b,e)</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
unsigned int <b>size</b>(const T& polygon)</font></td>
<td><font face="Times New Roman">Returns the number of edges in the
outer shell of the polygon_with_holes. Does not include sizes of
@@ -174,7 +192,7 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models polygon_with_holes or one
of its refinements into left object
@@ -182,8 +200,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- bool <b>contains</b>(const T&, const point_type& point, <br>
+ typename point_type><br />
+ bool <b>contains</b>(const T&, const point_type& point, <br />
bool consider_touch=true)</font></td>
<td>Given an object that models polygon_with_holes and an object that models
@@ -194,86 +212,85 @@
the polygon or one of its holes.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br>
- template <typename T, typename point_type><br>
+ <td width="586"><font face="Courier New">// get the center coordinate<br />
+ template <typename T, typename point_type><br />
void <b>center</b>(point_type& p, const T& polygon)</font></td>
<td>Sets object that models point to the center point of the bounding
box of an object that models polygon_with_holes.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename rectangle_type><br>
+ typename rectangle_type><br />
bool <b>extents</b>(rectangle_type& bbox, const T& polygon)</font></td>
<td>Sets object that models rectangle to the bounding box of an object
that models polygon_with_holes and returns true. Returns false and
leaves bbox unchanged if polygon is empty.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
manhattan_area_type <b>area</b>(const T& polygon)</font></td>
<td>Returns the area of an object
that models polygon_with_holes including subtracting the area of its
holes from the area of the outer shell polygon.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
direction_1d <b>winding</b>(const T& polygon)</font></td>
<td>Returns the winding direction of an object
that models polygon_with_holes, LOW == CLOCKWISE, HIGH =
COUNTERCLOCKWISE.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_difference <b>perimeter</b>(const T& polygon)</font></td>
<td>Returns the perimeter length of an object
that models polygon, including the perimeters of the holes.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename transform_type><br>
+ typename transform_type><br />
T& <b>transform</b>(T& polygon, const transform_type&)</font></td>
<td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
transforming its vertices. Also applies transform() on the holes
of the polygon.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_up</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales up outer shell and holes of an object that models
polygon by unsigned factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>scale_down</b>(T& polygon, unsigned_area_type factor)</font></td>
<td>Scales down outer shell and holes of an object that models
polygon by unsigned factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T, scaling_type><br>
+ <td width="586"><font face="Courier New">template <typename T, scaling_type><br />
T& <b>scale</b>(T& rectangle, double scaling) </font></td>
<td>Scales outer shell and holes of an object that models polygon by
floating point factor.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>move</b>(T& polygon, orientation_2d,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>move</b>(T& polygon, orientation_2d,<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to coordinate indicated by orientation_2d of
vertices of an object that models polygon .</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br>
- polygon_type& <b>convolve</b>(polygon_type& polygon,<br>
-
- const point_type& point)</font></td>
+ <td width="586"><font face="Courier New">template <typename polygon_type, typename point_type><br />
+ polygon_type& <b>convolve</b>(polygon_type& polygon,<br />
+const point_type& point)</font></td>
<td>Convolves coordinate values of point with the outer shell and holes of an
object that models polygon_with_holes.</td>
</tr>
- </table>
+ </tbody></table>
<h1>Polygon With Holes Data</h1>
<p>
-<p>The library provides a model of polygon with holes concept declared
+</p><p>The library provides a model of polygon with holes concept declared
<font face="Courier New">
template<typename T> polygon_with_holes_data </font>where T is the
coordinate type.</p>
@@ -282,8 +299,8 @@
library polygon data type instead of providing their own. The data type is
implemented to be convenient to use with the library traits.</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">polygon_with_holes_concept</font></td>
</tr>
@@ -311,13 +328,13 @@
</tr>
<tr>
<td width="586"><font face="Courier New">polygon_with_holes_data& <b>
- <br>operator=</b>(const polygon_with_holes_data& that)</font></td>
+ <br />operator=</b>(const polygon_with_holes_data& that)</font></td>
<td>Assignment operator.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b> </b>
polygon_with_holes_data&<b>
- <br> operator=</b>(const T2& that) const</font></td>
+ <br /> operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of polygon with holes.</td>
</tr>
<tr>
@@ -353,29 +370,29 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
<td>Sets the polygon to the iterator range of points. </td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename iT><b>
- <br> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
+ <br /> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
<td>Sets the polygon holes the iterator range of hole polygons. These
polygons in the input range may be either polygon_data or
polygon_with_holes_data or any type that provides begin and end member
functions to iterate over point_data<T>.</td>
</tr>
-</table>
- <tr>
+</tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table3">
+<table class="docinfo" id="table3" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -388,6 +405,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_property_merge.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_property_merge.htm (original)
+++ trunk/libs/polygon/doc/gtl_property_merge.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Property Merge</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Property Merge</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,35 +39,50 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Property Merge</h1>
<p>
-<p>The following is the declaration of the property merge algorithm.<p>
+</p><p>The following is the declaration of the property merge algorithm.</p><p>
<font face="Courier New">template <typename coordinate_type, typename
-property_type><br>
-class property_merge;</font><p>The property algorithm computes the n-layer
+property_type><br />
+class property_merge;</font></p><p>The property algorithm computes the n-layer
map overlay of input polygon sets. Each input geometry is inserted along
with a property value. The property type can be anything suitable for use
as an element of a std::set. Multiple geometry objects can be separately
@@ -72,13 +90,13 @@
operation a fairly complex container is required. Resulting geometries are
associated with unique subsets of property values of the input geometry.
Two suitable containers for storing the result of a property merge operation
-are:<p><font face="Courier New">std::map<std::set<property_type>, polygon_set_data<coordinate_type>
-><br>
-std::map<std::vector<property_type>, polygon_set_data<coordinate_type> ></font><p>
+are:</p><p><font face="Courier New">std::map<std::set<property_type>, polygon_set_data<coordinate_type>
+><br />
+std::map<std::vector<property_type>, polygon_set_data<coordinate_type> ></font></p><p>
Example code property_merge_usage.cpp
- demonstrates using the n-layer map-overlay algorithm on polygon data.<h2>Member Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
+ demonstrates using the n-layer map-overlay algorithm on polygon data.</p><h2>Member Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">property_merge</font></b><font face="Courier New">()</font></td>
<td>Default constructor. </td>
</tr>
@@ -89,7 +107,7 @@
</tr>
<tr>
<td width="586">
-<font face="Courier New">void <br><b>insert</b>(const polygon_set_data<coordinate_type>& ps,<br>
+<font face="Courier New">void <br /><b>insert</b>(const polygon_set_data<coordinate_type>& ps,<br />
const property_type& property)</font></td>
<td>I<font face="Times New Roman">nsert a polygon set with an associated
@@ -98,8 +116,8 @@
<tr>
<td width="586">
<font face="Courier New">
-template <class GeoObjT><br>
-void <b>insert</b>(const GeoObjT& geoObj,<br>
+template <class GeoObjT><br />
+void <b>insert</b>(const GeoObjT& geoObj,<br />
const property_type& property)</font></td>
<td>Insert a geometry object that is a refinement of polygon set with an
@@ -108,25 +126,25 @@
<tr>
<td width="586">
<font face="Courier New">
-template <typename result_type><br>
+template <typename result_type><br />
void <b>merge</b>(result_type& result)</font></td>
<td>Accepts a container object that conforms to the expectations defined
above. Performs property merge and populates the container
object. Expected n log n runtime, worst case quadratic runtime wrt.
vertices + intersections.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table2">
+<table class="docinfo" id="table2" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -139,6 +157,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_property_merge_45.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_property_merge_45.htm (original)
+++ trunk/libs/polygon/doc/gtl_property_merge_45.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Property Merge 90</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Property Merge 90</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,35 +39,50 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Property Merge 45</h1>
<p>
-<p>The following is the declaration of the property merge algorithm.<p>
+</p><p>The following is the declaration of the property merge algorithm.</p><p>
<font face="Courier New">template <typename coordinate_type, typename
-property_type><br>
-class property_merge_45;</font><p>The property algorithm computes the n-layer
+property_type><br />
+class property_merge_45;</font></p><p>The property algorithm computes the n-layer
map overlay of input polygon sets. Each input geometry is inserted along
with a property value. The property type can be anything suitable for use
as an element of a std::set. Multiple geometry objects can be separately
@@ -72,13 +90,13 @@
operation a fairly complex container is required. Resulting geometries are
associated with unique subsets of property values of the input geometry.
Two suitable containers for storing the result of a property merge operation
-are:<p><font face="Courier New">std::map<std::set<property_type>, polygon_45_set_data<coordinate_type>
-><br>
-std::map<std::vector<property_type>, polygon_45_set_data<coordinate_type> ></font><p>
+are:</p><p><font face="Courier New">std::map<std::set<property_type>, polygon_45_set_data<coordinate_type>
+><br />
+std::map<std::vector<property_type>, polygon_45_set_data<coordinate_type> ></font></p><p>
Example code property_merge_usage.cpp
- demonstrates using the n-layer map-overlay algorithm on polygon 90 data.<h2>Member Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
+ demonstrates using the n-layer map-overlay algorithm on polygon 90 data.</p><h2>Member Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">property_merge_45</font></b><font face="Courier New">()</font></td>
<td>Default constructor. </td>
</tr>
@@ -89,7 +107,7 @@
</tr>
<tr>
<td width="586">
-<font face="Courier New">void <br><b>insert</b>(const polygon_45_set_data<coordinate_type>& ps,<br>
+<font face="Courier New">void <br /><b>insert</b>(const polygon_45_set_data<coordinate_type>& ps,<br />
const property_type& property)</font></td>
<td>I<font face="Times New Roman">nsert a polygon set with an associated
@@ -98,8 +116,8 @@
<tr>
<td width="586">
<font face="Courier New">
-template <class GeoObjT><br>
-void <b>insert</b>(const GeoObjT& geoObj,<br>
+template <class GeoObjT><br />
+void <b>insert</b>(const GeoObjT& geoObj,<br />
const property_type& property)</font></td>
<td>Insert a geometry object that is a refinement of polygon 45 set with
@@ -108,24 +126,24 @@
<tr>
<td width="586">
<font face="Courier New">
-template <typename result_type><br>
+template <typename result_type><br />
void <b>merge</b>(result_type& result)</font></td>
<td>Accepts a container object that conforms to the expectations defined
above. Performs property merge and populates the container
object. O(n log n) runtime wrt. vertices + intersections.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table2">
+<table class="docinfo" id="table2" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -138,6 +156,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_property_merge_90.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_property_merge_90.htm (original)
+++ trunk/libs/polygon/doc/gtl_property_merge_90.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Property Merge 90</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Property Merge 90</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,35 +39,50 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- </ul>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Property Merge 90</h1>
<p>
-<p>The following is the declaration of the property merge algorithm.<p>
+</p><p>The following is the declaration of the property merge algorithm.</p><p>
<font face="Courier New">template <typename coordinate_type, typename
-property_type><br>
-class property_merge_90;</font><p>The property algorithm computes the n-layer
+property_type><br />
+class property_merge_90;</font></p><p>The property algorithm computes the n-layer
map overlay of input polygon sets. Each input geometry is inserted along
with a property value. The property type can be anything suitable for use
as an element of a std::set. Multiple geometry objects can be separately
@@ -72,13 +90,13 @@
operation a fairly complex container is required. Resulting geometries are
associated with unique subsets of property values of the input geometry.
Two suitable containers for storing the result of a property merge operation
-are:<p><font face="Courier New">std::map<std::set<property_type>, polygon_90_set_data<coordinate_type>
-><br>
-std::map<std::vector<property_type>, polygon_90_set_data<coordinate_type> ></font><p>
+are:</p><p><font face="Courier New">std::map<std::set<property_type>, polygon_90_set_data<coordinate_type>
+><br />
+std::map<std::vector<property_type>, polygon_90_set_data<coordinate_type> ></font></p><p>
Example code property_merge_usage.cpp
- demonstrates using the n-layer map-overlay algorithm on polygon 90 data.<h2>Member Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
+ demonstrates using the n-layer map-overlay algorithm on polygon 90 data.</p><h2>Member Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">property_merge_90</font></b><font face="Courier New">()</font></td>
<td>Default constructor. </td>
</tr>
@@ -89,7 +107,7 @@
</tr>
<tr>
<td width="586">
-<font face="Courier New">void <br><b>insert</b>(const polygon_90_set_data<coordinate_type>& ps,<br>
+<font face="Courier New">void <br /><b>insert</b>(const polygon_90_set_data<coordinate_type>& ps,<br />
const property_type& property)</font></td>
<td>I<font face="Times New Roman">nsert a polygon set with an associated
@@ -98,8 +116,8 @@
<tr>
<td width="586">
<font face="Courier New">
-template <class GeoObjT><br>
-void <b>insert</b>(const GeoObjT& geoObj,<br>
+template <class GeoObjT><br />
+void <b>insert</b>(const GeoObjT& geoObj,<br />
const property_type& property)</font></td>
<td>Insert a geometry object that is a refinement of polygon 90 set with
@@ -108,24 +126,24 @@
<tr>
<td width="586">
<font face="Courier New">
-template <typename result_type><br>
+template <typename result_type><br />
void <b>merge</b>(result_type& result)</font></td>
<td>Accepts a container object that conforms to the expectations defined
above. Performs property merge and populates the container
object. O(n log n) runtime wrt. vertices + intersections.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table2">
+<table class="docinfo" id="table2" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -138,6 +156,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Modified: trunk/libs/polygon/doc/gtl_rectangle_concept.htm
==============================================================================
--- trunk/libs/polygon/doc/gtl_rectangle_concept.htm (original)
+++ trunk/libs/polygon/doc/gtl_rectangle_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -1,14 +1,15 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Rectangle Concept</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Rectangle Concept</title>
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
@@ -20,6 +21,8 @@
<li>Coordinate Concept</li>
<li>Interval Concept</li>
<li>Point Concept</li>
+ <li>Segment Concept</li>
+
<li>Rectangle Concept</li>
<li>Polygon 90 Concept</li>
<li>Polygon 90 With Holes Concept</li>
@@ -36,6 +39,18 @@
<li>Property Merge 90</li>
<li>Property Merge 45</li>
<li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
@@ -45,31 +60,35 @@
<li>Performance Analysis</li>
<li>Layout Versus Schematic Tutorial</li>
<li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
+
</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>Rectangle Concept</h1>
<p>
-<p>The rectangle concept tag is <font face="Courier New">
+</p><p>The rectangle concept tag is <font face="Courier New">
rectangle_concept</font></p>
<p>
To register a user defined type as a model of
<font face="Times New Roman">rectangle </font>concept, specialize the
geometry concept meta-function for that type. In the example below CRectangle is registered as a model of
-rectangle concept.<p>
-<font face="Courier New">template <><br>
-struct geometry_concept<CRectangle> { typedef rectangle_concept type; };</font><p>
+rectangle concept.</p><p>
+<font face="Courier New">template <><br />
+struct geometry_concept<CRectangle> { typedef rectangle_concept type; };</font></p><p>
<font face="Times New Roman">The semantic of a rectangle is that it has an x and
a y interval and these intervals conform to the semantic of an interval
including its invariant. This invariant on the intervals of a rectangle is enforced by the generic library functions that
@@ -77,7 +96,7 @@
mapping of that data type to the rectangle concept through its traits. In
this way a boost::tuple<int, int, int, int> or boost::array<int, 4>
could be made models of rectangle by simply providing indirect access to their
-elements through traits.</font><p>
+elements through traits.</font></p><p>
<font face="Times New Roman">Below is shown the default rectangle traits.
Specialization of these traits is required for types that don't conform to the
default behavior. The interested reader will note SFINAE is used on the
@@ -86,103 +105,104 @@
necessary when refinements of concepts are used and it is undesirable to attempt
to match default traits to non-rectangle types at compile time.
Specializing rectangle_traits can be done easily by simply providing gtl_yes as
-the enable parameter.</font><p>
-<font face="Courier New">template <typename T, typename enable = gtl_yes><br>
-struct rectangle_traits {};</font><p>
-<font face="Courier New">template <typename T><br>
-struct rectangle_traits<T, gtl_no> {};<br>
-<br>
-template <typename T><br>
+the enable parameter.</font></p><p>
+<font face="Courier New">template <typename T, typename enable = gtl_yes><br />
+struct rectangle_traits {};</font></p><p>
+<font face="Courier New">template <typename T><br />
+struct rectangle_traits<T, gtl_no> {};<br />
+<br />
+template <typename T><br />
struct rectangle_traits<T, typename gtl_same_type<typename T::interval_type,
-typename T::interval_type>::type> {<br>
- typedef typename T::coordinate_type coordinate_type;<br>
- typedef typename T::interval_type interval_type;<br>
+typename T::interval_type>::type> {<br />
+ typedef typename T::coordinate_type coordinate_type;<br />
+ typedef typename T::interval_type interval_type;<br />
static inline interval_type get(const T& rectangle,
-orientation_2d orient) {<br>
+orientation_2d orient) {<br />
return
-rectangle.get(orient); }<br>
-};<br>
-<br>
-template <typename T><br>
-struct rectangle_mutable_traits {<br>
- template <typename T2><br>
+rectangle.get(orient); }<br />
+};<br />
+<br />
+template <typename T><br />
+struct rectangle_mutable_traits {<br />
+ template <typename T2><br />
static inline void set(T& rectangle, orientation_2d
-orient, const T2& interval) {<br>
+orient, const T2& interval) {<br />
rectangle.set(orient,
-interval); }<br>
- template <typename T2, typename T3><br>
+interval); }<br />
+ template <typename T2, typename T3><br />
static inline T construct(const T2& interval_horizontal,
-const T3& interval_vertical) {<br>
+const T3& interval_vertical) {<br />
return
-T(interval_horizontal, interval_vertical); }<br>
-};</font><h2>Functions</h2>
-<table border="1" width="100%" id="table1">
- <tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+T(interval_horizontal, interval_vertical); }<br />
+};</font></p><h2>Functions</h2>
+<table id="table1" border="1" width="100%">
+ <tbody><tr>
+ <td width="586"><font face="Courier New">template <typename T><br />
interval_type <b>get</b>(const T& rectangle, orientation_2d)</font></td>
<td><font face="Times New Roman">Expects a model of rectangle.
Returns the x interval or y interval of the rectangle, depending on the
- orientation_2d value.</font><font face="Courier New"><br>
+ orientation_2d value.</font><font face="Courier New"><br />
</font></td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- coordinate_type><br>
+ coordinate_type><br />
void <b>set</b>(T& rectangle, orientation_2d, coordinate_type)</font></td>
<td><font face="Times New Roman">Expects a model of rectangle.
Sets the x interval or y interval of the rectangle to the
coordinate, depending on the orientation_2d value.</font></td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
interval_type <b>get</b>(const T& rectangle, orientation_2d,
- <br> direction_1d)</font></td>
- <td><font face="Times New Roman">Expects a model of rectangle.
- Returns the coordinate specificed by the direction_1d value of the x interval or y interval of the rectangle, depending on the
- orientation_2d value.</font><font face="Courier New"><br>
+ <br /> direction_1d)</font></td>
+ <td><font face="Times New Roman">Expects
+a model of rectangle. Returns the coordinate specificed by the
+direction_1d value of the x interval or y interval of the rectangle,
+depending on the orientation_2d value.</font><font face="Courier New"><br />
</font></td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- coordinate_type><br>
- void <b>set</b>(T& rectangle, orientation_2d, direction_1d, <br> coordinate_type)</font></td>
+ coordinate_type><br />
+ void <b>set</b>(T& rectangle, orientation_2d, direction_1d, <br /> coordinate_type)</font></td>
<td><font face="Times New Roman">Expects a model of rectangle.
Sets the coordinate specified by the direction_1d value of the x interval or y interval of the rectangle to the
coordinate, depending on the orientation_2d value.</font></td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- T2><br>
+ T2><br />
T <b>construct</b>(const T2& h, const T2& v)</font></td>
<td>Construct an object that is a model of rectangle given x interval
and y intervals.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- T2><br>
- T <b>construct</b>(coordinate_type xl, coordinate_type yl, <br> coordinate_type
+ T2><br />
+ T <b>construct</b>(coordinate_type xl, coordinate_type yl, <br /> coordinate_type
xh, coordinate_type yh)</font></td>
<td>Construct an object that is a model of rectangle given four coordinate values.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>assign</b>(T1& left, const T2& right)</font></td>
<td>Copies data from right object that models rectangle into left object
that models rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- T2><br>
+ T2><br />
bool <b>equivalence</b>(const T& rectangle1, </font>
- <br><font face="Courier New"> const T2& rectangle2)</font></td>
+ <br /><font face="Courier New"> const T2& rectangle2)</font></td>
<td>Given two objects that model rectangle, compares and returns true if
their x and y intervals are respectively equivalent.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- bool <b>contains</b>(const T&, const point_type& point, <br>
+ typename point_type><br />
+ bool <b>contains</b>(const T&, const point_type& point, <br />
bool consider_touch=true)</font></td>
<td>Given an object that models rectangle and an object that models
@@ -193,8 +213,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>contains</b>(const T1& a, const T2& b, <br>
+ T2><br />
+ bool <b>contains</b>(const T1& a, const T2& b, <br />
bool consider_touch = true) </font></td>
<td>Returns true if model of rectangle a contains both intervals of
@@ -202,170 +222,174 @@
consider rectangle b contained even if it touches the boundary of a.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
interval_type <b>horizontal</b>(const T& rectangle)</font></td>
<td>Returns the x interval of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
interval_type <b>vertical</b>(const T& rectangle)</font></td>
<td>Returns the y interval of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_type <b>xl</b>(const T& rectangle)</font></td>
<td>Returns the west coordinate of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_type <b>xh</b>(const T& rectangle)</font></td>
<td>Returns the east coordinate of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_type <b>yl</b>(const T& rectangle)</font></td>
<td>Returns the south coordinate of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_type <b>yh</b>(const T& rectangle)</font></td>
<td>Returns the north coordinate of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_type <b>ll</b>(const T& rectangle)</font></td>
<td>Returns the lower left corner point of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_type <b>lr</b>(const T& rectangle)</font></td>
<td>Returns the lower right corner point of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_type <b>ul</b>(const T& rectangle)</font></td>
<td>Returns the upper left corner point of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
point_type <b>ur</b>(const T& rectangle)</font></td>
<td>Returns the upper right corner point of an object that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br>
- template <typename T, typename point_type><br>
+ <td width="586"><font face="Courier New">// get the center coordinate<br />
+ template <typename T, typename point_type><br />
void <b>center</b>(point_type& p, const T& rectangle)</font></td>
<td>Sets object that models point to the center point of an object that models rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename interval_type><br>
+ typename interval_type><br />
void <b>horizontal</b>(T& rectangle, const interval_type& i)</font></td>
<td>Sets the x interval of the object that models rectangle to be equal
to the value of an object that models interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename interval_type><br>
+ typename interval_type><br />
void <b>vertical</b>(T& rectangle, const interval_type& i )</font></td>
<td>Sets the y interval of the object that models rectangle to be equal
to the value of an object that models interval.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type><br>
+ rectangle_type><br />
void <b>xl</b>(rectangle_type& rectangle, coordinate_type )</font></td>
<td>Sets the west coordinate of the object that models rectangle to be equal
to the coordinate value.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type><br>
+ rectangle_type><br />
void <b>xh</b>(rectangle_type& rectangle, coordinate_type )</font></td>
<td>Sets the east coordinate of the object that models rectangle to be equal
to the coordinate value.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type><br>
+ rectangle_type><br />
void <b>yl</b>(rectangle_type& rectangle, coordinate_type )</font></td>
<td>Sets the south coordinate of the object that models rectangle to be equal
to the coordinate value.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type><br>
+ rectangle_type><br />
void <b>yh</b>(rectangle_type& rectangle, coordinate_type )</font></td>
<td>Sets the north coordinate of the object that models rectangle to be equal
to the coordinate value.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename T1, typename T2><br>
+ typename T1, typename T2><br />
T& <b>set_points</b>(T& rectangle, const T1& p1, const T2& p2)</font></td>
<td>Sets the rectangle to the rectangle fully described by the points p1
and p2.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_difference <b>delta</b>(const T& rectangle,
- <br> orientation_2d)</font></td>
+ <br />
+orientation_2d)</font></td>
<td>Returns the delta of the interval specified by orientation_2d of an object
that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
manhattan_area_type <b>area</b>(const T& rectangle)</font></td>
<td>Returns the area of an object
that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_difference <b>half_perimeter</b>(const T& rectangle)</font></td>
<td>Returns the length plus width of an object
that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
coordinate_difference <b>perimeter</b>(const T& rectangle)</font></td>
<td>Returns the perimeter length of an object
that models rectangle.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
orientation_2d <b>quess_orientation</b>(const T& rectangle)</font></td>
<td>Returns the orientation in which the rectangle has a longer delta.
Returns HORIZONTAL if the rectangle is a square.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type><br>
- rectangle_type& <b>transform</b>(rectangle_type& rectangle,<br>
- coordinate_type axis = 0)</font></td>
+ rectangle_type><br />
+ rectangle_type& <b>transform</b>(rectangle_type& rectangle,<br />
+
+coordinate_type axis = 0)</font></td>
<td>Applies transform() on the two points that fully describe the
rectangle and sets the rectangle to that described by the result of
transforming those points.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type><br>
- rectangle_type& <b>scale_up</b>(rectangle_type& rectangle, <br>
- unsigned_area_type factor)</font></td>
+ rectangle_type><br />
+ rectangle_type& <b>scale_up</b>(rectangle_type& rectangle, <br />
+
+unsigned_area_type factor)</font></td>
<td>Scales up x interval and y interval of an object that models
rectangle by unsigned factor.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type><br>
- rectangle_type& <b>scale_down</b>(rectangle_type& rectangle, <br>
- unsigned_area_type factor)</font></td>
+ rectangle_type><br />
+ rectangle_type& <b>scale_down</b>(rectangle_type& rectangle, <br />
+
+unsigned_area_type factor)</font></td>
<td>Scales down x interval and y interval of an object that models
rectangle by unsigned factor.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type, scaling_type><br>
- rectangle_type& <b>scale</b>(rectangle_type& rectangle,<br>
+ rectangle_type, scaling_type><br />
+ rectangle_type& <b>scale</b>(rectangle_type& rectangle,<br />
const scaling_type& scaling) </font></td>
<td>Applies scale() on the two points that fully describe the rectangle
@@ -373,33 +397,33 @@
those points.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
- T& <b>move</b>(T& rectangle, orientation_2d,<br>
+ <td width="586"><font face="Courier New">template <typename T><br />
+ T& <b>move</b>(T& rectangle, orientation_2d,<br />
coordinate_difference displacement)</font></td>
<td>Adds displacement value to interval indicated by orientation_2d of an
object that models rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type, typename point_type><br>
- rectangle_type& <b>convolve</b>(rectangle_type& rectangle,<br>
-
- const point_type& point)</font></td>
+ rectangle_type, typename point_type><br />
+ rectangle_type& <b>convolve</b>(rectangle_type& rectangle,<br />
+
+const point_type& point)</font></td>
<td>Convolves coordinate values of point with x interval and y interval of an
object that models rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename
- rectangle_type, typename point_type><br>
- rectangle_type& <b>deconvolve</b>(rectangle_type& rectangle,<br>
-
- const point_type& point)</font></td>
+ rectangle_type, typename point_type><br />
+ rectangle_type& <b>deconvolve</b>(rectangle_type& rectangle,<br />
+
+const point_type& point)</font></td>
<td>Deconvolves coordinate values of point withx interval and y interval of
an object that models rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>convolve</b>(T1& a, const T2& b)</font></td>
<td>Convolves x interval of b with x interval of a and
convolves y
@@ -407,14 +431,14 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>deconvolve</b>(T1& a, const T2& b)</font></td>
<td>Deconvolves x interval of b with x interval of a and
deconvolves y interval of b with y interval of a. </td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>reflected_convolve</b>(T1& a, const T2& b)</font></td>
<td>Reflected convolves y interval of b with x interval of a and
reflected convolves x
@@ -422,15 +446,15 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T1& <b>reflected_deconvolve</b>(T1& a, const T2& b)</font></td>
<td>Reflected deconvolves y interval of b with x interval of a and
reflected deconvolves x interval of b with y interval of a.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- coordinate_difference <b>euclidean_distance</b>(const T&,<br>
+ typename point_type><br />
+ coordinate_difference <b>euclidean_distance</b>(const T&,<br />
const point_type& point,
orienation_2d)</font></td>
<td>Returns the distance from an object that models rectangle to an
@@ -439,8 +463,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1,
- typename T2><br>
- coordinate_difference <b>euclidean_distance</b>(const T1& a,<br>
+ typename T2><br />
+ coordinate_difference <b>euclidean_distance</b>(const T1& a,<br />
const T2& b, orienation_2d)</font></td>
<td>Returns the distance from an object that models rectangle to an
object that models rectangle along the given orientation. Returns
@@ -448,8 +472,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- coordinate_difference <b>square_euclidean_distance</b>(const T&,<br>
+ typename point_type><br />
+ coordinate_difference <b>square_euclidean_distance</b>(const T&,<br />
const point_type& point)</font></td>
<td>Returns the square of the Euclidean distance between a point and a
rectangle. Returns zero if the point is contained within the
@@ -457,50 +481,50 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1,
- typename T2><br>
- coordinate_difference <b>square_euclidean_distance</b><br>
+ typename T2><br />
+ coordinate_difference <b>square_euclidean_distance</b><br />
(const T1& a, const T2& b)</font></td>
<td>Returns the square of the Euclidean distance between rectangles a
and b. Returns zero if the rectangles intersect.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- coordinate_difference <b>manhattan_distance</b>(const T&,<br>
+ typename point_type><br />
+ coordinate_difference <b>manhattan_distance</b>(const T&,<br />
const point_type& point)</font></td>
<td>Returns the Manhattan distance between a point and a rectangle.
Returns zero if the point is contained within the rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1,
- typename T2><br>
- coordinate_difference <b>manhattan_distance</b>(const T1& a, <br>
-
- const T2& b)</font></td>
+ typename T2><br />
+ coordinate_difference <b>manhattan_distance</b>(const T1& a, <br />
+
+const T2& b)</font></td>
<td>Returns the Manhattan distance between rectangles a and b.
Returns zero if the rectangles intersect.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T,
- typename point_type><br>
- coordinate_distance <b>euclidean_distance</b>(const T&,<br>
+ typename point_type><br />
+ coordinate_distance <b>euclidean_distance</b>(const T&,<br />
const point_type& point)</font></td>
<td>Returns the Euclidean distance between a point and a rectangle.
Returns zero if the point is contained within the rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1,
- typename T2><br>
- coordinate_distance <b>euclidean_distance</b>(const T1& a, <br>
-
- const T2& b)</font></td>
+ typename T2><br />
+ coordinate_distance <b>euclidean_distance</b>(const T1& a, <br />
+
+const T2& b)</font></td>
<td>Returns the Euclidean distance between rectangles a and b.
Returns zero if the rectangles intersect.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>intersects</b>(const T1& a, const T2& b, <br>
+ T2><br />
+ bool <b>intersects</b>(const T1& a, const T2& b, <br />
bool consider_touch = true)</font></td>
<td>Returns true if two objects that model rectangle overlap. If
@@ -509,10 +533,10 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>boundaries_intersect</b>(const T1& a, const T2& b, <br>
-
- bool consider_touch = true)</font></td>
+ T2><br />
+ bool <b>boundaries_intersect</b>(const T1& a, const T2& b, <br />
+
+bool consider_touch = true)</font></td>
<td>Returns true is two objects that model rectangle partially overlap
such that one there is an intersection between the edges of the two
rectangles If the consider_touch flag is true a coordinate is
@@ -521,8 +545,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>abuts</b>(const T1& a, const T2& b,<br>
+ T2><br />
+ bool <b>abuts</b>(const T1& a, const T2& b,<br />
direction_2d dir)
</font></td>
<td>Returns true if rectangle b abuts but down not overlap rectangle a
@@ -530,8 +554,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>abuts</b>(const T1& a, const T2& b,<br>
+ T2><br />
+ bool <b>abuts</b>(const T1& a, const T2& b,<br />
orientation_2d)
</font></td>
<td>Returns true if rectangle b abuts but down not overlap rectangle a
@@ -539,15 +563,15 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
bool <b>abuts</b>(const T1& a, const T2& b)</font></td>
<td>Returns true if rectangle b abuts but down not overlap rectangle a
on any side.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>intersect</b>(T1& a, const T2& b, orientation_2d<br>
+ T2><br />
+ bool <b>intersect</b>(T1& a, const T2& b, orientation_2d<br />
bool consider_touch = true) </font></td>
<td>Sets rectangle a to the intersection of rectangle a and interval b
@@ -558,8 +582,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
- bool <b>intersect</b>(T1& a, const T2& b,<br>
+ T2><br />
+ bool <b>intersect</b>(T1& a, const T2& b,<br />
bool consider_touch = true) </font></td>
<td>Sets rectangle a to the intersection of rectangle a and rectangle b
@@ -569,84 +593,84 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
T& <b>generalized_intersect</b>(T1& a, const T2& b)</font></td>
<td>Same as intersect, but if they do not intersect set a to the
rectangle between a and b by applying generalized_intersect() on the
intervals of the rectangles.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>bloat</b>(T& rectangle, coordinate_type)</font></td>
<td>Bloats x and y intervals of rectangle by coordinate value.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>bloat</b>(T& rectangle, direction_2d, coordinate_type)</font></td>
<td>Bloats side of rectangle specified by direction_2d by coordinate
value.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>bloat</b>(T& rectangle, orientation_2d, coordinate_type)</font></td>
<td>Bloats interval of rectangle specified by orientation_2d by
coordinate value.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>shrink</b>(T& rectangle, coordinate_type)</font></td>
<td>Shrinks x and y intervals of rectangle by coordinate value.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>shrink</b>(T& rectangle, direction_2d, coordinate_type)</font></td>
<td>Shrinks side of rectangle specified by direction_2d by coordinate
value.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T><br>
+ <td width="586"><font face="Courier New">template <typename T><br />
T& <b>shrink</b>(T& rectangle, orientation_2d, coordinate_type)</font></td>
<td>Shrinks interval of rectangle specified by orientation_2d by
coordinate value.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><br>
+ T2><br />
bool <b>encompass</b>(T1& a, const T2& b)</font></td>
<td>The x and y intervals of a are set to encompass the x and y
intervals of b respectively.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- point_type><br>
+ point_type><br />
bool <b>encompass</b>(T& rectangle, const point_type& point)</font></td>
<td>The x and y intervals of rectangle are set to encompass the x and y
coordinates of point respectively.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- interval_type><br>
+ interval_type><br />
bool <b>encompass</b>(T& rectangle, const interval_type& i,
- <br> orientation_2d)</font></td>
+ <br /> orientation_2d)</font></td>
<td>The interval of rectangle specified by orientation_2d is set to encompass the
interval i.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T, typename
- point_type><br>
+ point_type><br />
bool <b>get_corner</b>(point_type& point, const T& rectangle,
- <br>
+ <br />
direction_2d, direction_1d)</font></td>
<td>Sets point to the corner of the rectangle you reach if you look at
its side specified by direction_2d from within the rectangle and turn in
the direction_1d direction (low == left, high = right). Always
returns true.</td>
</tr>
-</table>
+</tbody></table>
<h1>Rectangle Data</h1>
<p>
-<p>The library provides a model of rectangle concept declared
+</p><p>The library provides a model of rectangle concept declared
<font face="Courier New">
template<typename T> rectangle_data </font>where T is the coordinate type.</p>
<p>This data type is used internally when a rectangle is needed and is available
@@ -654,8 +678,8 @@
instead of providing their own. The data type is implemented to be
convenient to use with the library traits.</p>
<h2>Members</h2>
-<table border="1" width="100%" id="table2">
- <tr>
+<table id="table2" border="1" width="100%">
+ <tbody><tr>
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
<td><font face="Times New Roman">rectangle_concept</font></td>
</tr>
@@ -675,8 +699,8 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T1, typename
- T2><b><br>
- rectangle_data</b>(const T1& horizontal_interval,<br>
+ T2><b><br />
+ rectangle_data</b>(const T1& horizontal_interval,<br />
const T2& vertical_interval)</font></td>
<td><font face="Times New Roman">Constructs a rectangle with two objects
@@ -694,19 +718,19 @@
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>rectangle_data& <b>
+ <br /> </b>rectangle_data& <b>
operator=</b>(const T2& that) const</font></td>
<td>Assign from an object that is a model of rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator==</b>(const T2& that) const</font></td>
<td>Compare equality to an object that is a model of rectangle.</td>
</tr>
<tr>
<td width="586"><font face="Courier New">template <typename T2><b>
- <br> </b>bool<b>
+ <br /> </b>bool<b>
operator!=</b>(const T2& that) const</font></td>
<td>Compare inequality to an object that is a model of rectangle.</td>
</tr>
@@ -716,35 +740,15 @@
<td>Get the interval in the given orientation.</td>
</tr>
<tr>
- <td width="586"><font face="Courier New">template <typename T2><br>
+ <td width="586"><font face="Courier New">template <typename T2><br />
void <b>set</b>(orientation_2d orient, const T2& value)</font></td>
<td>Sets the interval in the given orientation to the value of an object
that models interval.</td>
</tr>
- </table>
- <tr>
+ </tbody></table>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<table class="docinfo" rules="none" frame="void" id="table3">
- <colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
- </colgroup>
- <tbody vAlign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</table>
-
-</html>
\ No newline at end of file
+ </td></tr></tbody></table></body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/gtl_segment_concept.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/gtl_segment_concept.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,492 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<!--
+ Copyright 2009-2010 Intel Corporation
+ license banner
+--><title>Boost Polygon Library: Segment Concept</title>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept<br />
+ </li>
+ <li>Segment Concept</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+ </a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+ </a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --><br />
+ <p> </p>
+ <h1>Segment Concept</h1>
+ <p> </p>
+ <p> The segment concept tag is <font face="Courier New">segment_concept</font></p>
+ <p> To register a user defined type as a model of the segment
+concept, specialize the geometry concept meta-function for that
+type. In the example below CSegment is registered as a model of
+the segment concept.</p>
+ <p> <font face="Courier New">template <><br />
+struct geometry_concept<</font>CSegment<font face="Courier New">>
+{ typedef segment_concept type; };</font></p>
+ <p> The semantic of a segment is
+that it has a low and high point. A
+std::pair<Point, Point>,
+boost::tuple<Point, Point> or boost::array<Point, 2> could all be made models of
+segment by simply providing indirect access to their elements through
+traits, however, these objects cannot be made a model of both segment
+and rectangle in the same compilation unit, for obvious reason that
+duplicate specialization of the geometry_concept struct is illegal, but
+also because it would make overloading generic function by concept
+ambiguous if a type modeled more than one concept.</p>
+ <p> Below is shown the default
+segment traits. Specialization of these traits is required for
+types that don't conform to the default behavior.</p>
+
+
+ <p><span style="font-family: Courier New,Courier,monospace;"><span style="font-family: Courier New,Courier,monospace;">template <typename Segment></span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">struct segment_traits {</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;"> typedef typename Segment::coordinate_type coordinate_type;</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;"> typedef typename Segment::point_type point_type;</span><br style="font-family: Courier New,Courier,monospace;" />
+ <br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;"> static inline point_type get(const Segment& segment, direction_1d dir) {</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;"> return segment.get(dir);</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;"> }</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">};</span><br />
+ <br /><span style="font-family: Courier New,Courier,monospace;">template <typename Segment><br />
+struct segment_mutable_traits {<br />
+ typedef typename segment_traits<Segment>::point_type point_type;<br />
+<br />
+ static inline void set(Segment& segment, direction_1d dir, const point_type& point) {<br />
+ segment.set(dir, p);<br />
+ }<br />
+ <br />
+ static inline Segment construct(const point_type& low, const point_type& high) {<br />
+ return Segment(low, high);<br />
+ }<br />
+};</span></span></p><h2>Functions</h2>
+ <table style="width: 100%;" id="table1" border="1">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename Segment><br />point_type <b>get</b>(const Segment& segment, direction_1d dir)</font></td>
+ <td>Returns the low or high endpoint of an object that models a segment, depending on
+the direction_1d value.<font face="Courier New"> </font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename </font><font face="Courier New">Segment</font><font face="Courier New">, typename Point><br />
+void <b>set</b>(</font><font face="Courier New">Segment</font><font face="Courier New">& segment, direction_1d dir,<br />
+ const Point& </font><span style="font-family: Courier New;">point</span><font face="Courier New">)</font></td>
+ <td>Sets the low or high endpoint of an object that models a segment to an object that models a
+point, depending on the direction_1d value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template <typename Segment, typename Point1, typename Point2><br />
+Segment<b> construct</b>(const Point1& low, const Point2& high)</font></td>
+ <td>Constructs an object that is a model of segment given the two objects that are models of point.</td>
+ </tr>
+ <tr>
+ <td><font face="Courier New">template <typename Segment1, typename </font><font face="Courier New">Segment2</font><font face="Courier New">><br /></font><font face="Courier New">Segment1</font><font face="Courier New"> <span style="font-weight: bold;">copy_construct</span>(const </font><font face="Courier New">Segment2</font><font face="Courier New">& segment)</font></td>
+ <td style="text-align: left;">Copy constructs an object that is a model of segment given another segment.</td>
+ </tr>
+<tr>
+ <td width="586"><font face="Courier New">template
+<typename </font><font face="Courier New">Segment1</font><font face="Courier New">, typename </font><font face="Courier New">Segment2></font><br />
+ <font face="Courier New">Segment1</font><font face="Courier New">& <b>assign</b>(</font><font face="Courier New">Segment1</font><font face="Courier New">& segment1,<br />
+ const </font><font face="Courier New">Segment2</font><font face="Courier New">& segment2)</font></td>
+ <td>Copies data from the second object that models a segment into
+the first object that models a segment.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename </font><font face="Courier New">Segment1</font><font face="Courier New">, typename </font><font face="Courier New">Segment1</font><font face="Courier New">><br />
+bool <b>equivalence</b>(const </font><font face="Courier New">Segment1</font><font face="Courier New">& segment1,<br />
+ const </font><font face="Courier New">Segment1</font><font face="Courier New">& segment2)</font></td>
+ <td>Given two objects that model a segment, compares and
+returns true if their low and high values are respectively equal.</td>
+ </tr>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template <typename Segment, typename Point></span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">int orientation</span><span style="font-family: Courier New,Courier,monospace;">(const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="font-family: Courier New,Courier,monospace;">& segment,</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;"> const Point& point)</span><br />
+ </td>
+ <td>Implements
+a robust orientation test for two objects that model segment and point.
+Returns 0, if the point is collinear to the segment.<br />
+Returns 1, if the point lies to the left of the segment.<br />
+Returns -1, if the point lies to the right of the segment.<br />
+
+ </td>
+ </tr>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template <typename Segment1, typename Segment2></span><br style="font-family: Courier New,Courier,monospace;" />
+
+ <span style="font-family: Courier New,Courier,monospace;">int orientation</span><span style="font-family: Courier New,Courier,monospace;">(const </span><span style="font-family: Courier New,Courier,monospace;">Segment1</span><span style="font-family: Courier New,Courier,monospace;">& segment1,</span><br style="font-family: Courier New,Courier,monospace;" />
+
+ <span style="font-family: Courier New,Courier,monospace;"> const Segment2& segment2)</span></td>
+ <td>Implements a robust orientation test for two objects
+that are models of segment. Note: the segments are treated as math.
+vectors.<br />
+Returns 0, if the segments are collinear.<br />
+Returns 1, if the second segment is CCW oriented to the first segment.<br />
+Returns -1, if the second segment is CW oriented to the first segment.<br />
+ </td>
+ </tr>
+<tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template <typename </span><font face="Courier New">Segment, typename Point</font><span style="font-family: Courier New,Courier,monospace;">></span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">bool </span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span style="font-family: Courier New,Courier,monospace;">(const </span><font face="Courier New">Segment</font><span style="font-family: Courier New,Courier,monospace;">& segment,</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;"> const Point& value,</span><span style="font-family: Courier New,Courier,monospace;"> bool consider_touch)</span><br />
+ </td>
+ <td>Returns true if an object that is a model of segment contains an object that is a model of point, else false.<br />
+ </td>
+ </tr>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template <typename Segment1, typename Segment2></span><br style="font-family: Courier New,Courier,monospace;" />
+
+ <span style="font-family: Courier New,Courier,monospace;">bool </span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span style="font-family: Courier New,Courier,monospace;">(const </span><span style="font-family: Courier New,Courier,monospace;">Segment1</span><span style="font-family: Courier New,Courier,monospace;">& segment1,</span><br style="font-family: Courier New,Courier,monospace;" />
+
+ <span style="font-family: Courier New,Courier,monospace;"> const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="font-family: Courier New,Courier,monospace;">2& segment2,</span> <span style="font-family: Courier New,Courier,monospace;">bool consider_touch)</span></td>
+ <td>Returns true if the first object contains the second one, else false. Both objects model a segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>><br />
+point_type <span style="font-weight: bold;">low</span>(const <span style="font-family: Courier New,Courier,monospace;">Segment</span>& segment)<br />
+ </td>
+ <td>Returns the low endpoint of an object that is a model of segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>><br />
+point_type <span style="font-weight: bold;">high</span>(const <span style="font-family: Courier New,Courier,monospace;">Segment</span>& segment)</td>
+ <td>Returns the high endpoint of an object that is a model of segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>><br />
+point_type <span style="font-weight: bold;">center</span>(const <span style="font-family: Courier New,Courier,monospace;">Segment</span>& segment)</td>
+ <td>Returns the central point of an object that is a model of segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>, typename Point><br />void <span style="font-weight: bold;">low</span>(<span style="font-family: Courier New,Courier,monospace;">Segment</span>& segment, const Point& point)</td>
+ <td>Sets the low endpoint of an object that is a model of segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename <span style="font-family: Courier New,Courier,monospace;">Segment, typename Point</span>><br />
+void <span style="font-weight: bold;">high</span>(<span style="font-family: Courier New,Courier,monospace;">Segment</span>& segment, const Point& point)</td>
+ <td>Sets the high endpoint of an object that is a model of segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template <typename </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="font-family: Courier New,Courier,monospace;">></span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">distance_type <span style="font-weight: bold;">length</span>(const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="font-family: Courier New,Courier,monospace;">& segment)</span><br />
+ </td>
+ <td>Returns length of an object that is a model of segment.<br />
+ </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">><br /></font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& <b>scale_up</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& </font><font face="Courier New">segment</font><font face="Courier New">, <br /> unsigned_area_type factor)</font></td>
+ <td>Multiplies x and y coordinates of both endpoints of an object that is a model of segment by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">><br />
+ </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& <b>scale_down</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& </font><font face="Courier New">segment</font><font face="Courier New">, <br />
+ unsigned_area_type factor)</font></td>
+ <td>Divides x and y coordinates of both endpoints of an object that is a model of segment by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">, typename Scale><br />
+ </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& <b>scale</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& </font><font face="Courier New">segment</font><font face="Courier New">, const Scale& sc) </font></td>
+ <td>Calls
+the scale member function of the scaling type on the low and high endpoint of
+an object that is a model of segment and updates the segment with the
+scaled endpoints.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">, typename Transform><br /></font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& <b>transform</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& segment, const </font><font face="Courier New">Transform</font><font face="Courier New">& tr) </font></td>
+ <td>Calls the transform member function of transform type
+on the low and high endpoints of an object that is a model of segment and updates the segment with the transformed endpoints.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">><br />
+ </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& <b>move</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& segment, orientation_2d<br />
+ coordinate_difference displacement)</font></td>
+ <td>Adds displacement value to the x or y coordinates of both endpoints of an object
+that is a model of segment indicated by the orientation_2d.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<</font><span style="font-family: Courier New,Courier,monospace;">Segment, Point</span><font face="Courier New">><br />
+ </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& <b>convolve</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& segment, const Point& point)</font></td>
+ <td>Convolves both endpoints of an object that models a segment with an object that models a point.<br />
+</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<</font><span style="font-family: Courier New,Courier,monospace;">Segment, Point</span><font face="Courier New">><br />
+ </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& <b>deconvolve</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& segment, const Point& point)</font></td>
+ <td>Deconvolves both endpoints of an object that models a segment with an object that models a point. </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename Segment1, typename Segment2><br />
+
+
+bool <span style="font-weight: bold;">abuts</span>(const Segment1& segment1,<br />
+
+
+ const Segment2& segment2, direction_1d dir)</td>
+ <td>Returns true if two objects that model a segment abut, depending on the direction_1d value.</td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename Segment1, typename Segment2><br />
+
+bool <span style="font-weight: bold;">abuts</span>(const Segment1& segment1,<br />
+
+ const Segment2& segment2)</td>
+ <td>Returns true if two objects that model a segment abut: either the first one to the second one or vice versa.</td>
+ </tr>
+
+
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template <typename Segment1, typename Segment2></span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">bool <span style="font-weight: bold;">intersects</span>(const Segment1& segment1,</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;"> const Segment2& segment2,<br />
+ bool consider_touch)</span><br />
+ </td>
+ <td>Returns true if two objects that model a segment intersect, else false.<br />
+ </td>
+ </tr>
+
+
+<tr>
+ <td style="font-family: Courier New,Courier,monospace;"><font face="Courier New">template
+<typename </font><span style="font-family: Courier New,Courier,monospace;">Segment, typename Point</span><font face="Courier New">><br />distance_type <b>euclidean_distance</b>(<br />
+ const </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">& segment, const Point& point)</font>
+ </td>
+ <td>Returns distance from an object that is a model of segment
+to an object that is a model of point.
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;"><font face="Courier New">template
+<typename Segment1, typename </font><font face="Courier New">Segment2</font><font face="Courier New">><br />distance_type <b>euclidean_distance</b>(<br />
+ const </font><font face="Courier New">Segment1</font><font face="Courier New">& segment1, const </font><font face="Courier New">Segment2</font><font face="Courier New">& segment2)</font>
+ </td>
+ <td>Returns distance between two objects that are models of segment.
+ </td>
+ </tr>
+
+
+
+
+ </tbody>
+ </table>
+ <h1>Segment Data</h1>
+ <p> </p>
+ <p>The library provides a model of the segment concept declared <font face="Courier New">template<typename T> segment_data </font>where
+T is the coordinate type.</p>
+ <p>This data type is used internally when a segment is needed and
+is available to the library user who finds it convenient to use a
+library segment data type instead of providing their own. The data
+type is implemented to be convenient to use with the library traits.</p><h2>Members</h2>
+ <table style="width: 100%;" id="table2" border="1">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td>segment_concept</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td>T</td>
+ </tr>
+ <tr>
+ <td><b><font face="Courier New">point_type</font></b></td>
+ <td>point_data<T><br />
+ </td>
+ </tr>
+<tr>
+ <td width="586"><font face="Courier New"><b>segment_data</b>()</font></td>
+ <td>Default constructor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>segment_data</b>(const point_type& low,<br />
+ const point_type& high)</font></td>
+ <td>Constructs a segment from the given endpoints.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>segment_data</b>(const segment_data& that)</font></td>
+ <td>Copy constructor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">segment_data& <b>operator=</b>(const segment_data& that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+<typename Segment><b><br />
+ </b>segment_data& <b>operator=</b>(const Segment& that)
+const</font></td>
+ <td>Assign from an object that is a model of segment.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b> operator==</b>(const segment_data& that) const</font></td>
+ <td>Equality operator overload.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b> </b>bool<b> operator!=</b>(const segment_data& that) const</font></td>
+ <td>Inequality operator overload.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b> </b>bool<b> operator<</b>(const segment_data& that) const</font></td>
+ <td>Less operator overload. Compares low endpoints then high endpoints to break ties.<br />
+</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b> </b>bool<b> operator<=</b>(const segment_data& that) const</font></td>
+ <td>Less or equal operator overload. Compares low endpoints then high endpoints to break ties.<br />
+</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b> </b>bool<b> operator></b>(const segment_data& that) const</font></td>
+ <td>Greater operator overload. Compares low endpoints then high endpoints to break ties.<br />
+</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b> </b>bool<b> operator>=</b>(const segment_data& that) const</font></td>
+ <td>Greater or equal operator overload. Compares low endpoints then high endpoints to break ties.<br />
+</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">point_type <b>get</b>(direction_1d dir) const</font></td>
+ <td>Retrieves the low/high endpoint considering direction value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">point_type <span style="font-weight: bold;">low</span>() const</font></td>
+ <td>Retrieves the low endpoint.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">point_type <span style="font-weight: bold;">high</span>() const</font></td>
+ <td>Retrieves the high endpoint.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>set</b></font><font face="Courier New">(direction_1d dir</font><font face="Courier New">, const point_type& point)</font></td>
+ <td>Sets the endpoint in the given direction.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">segment_data& <span style="font-weight: bold;">low</span>(const point_type& point)</font></td>
+ <td>Sets the low endpoint.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">segment_data& <span style="font-weight: bold;">high(</span>const point_type& point)</font></td>
+ <td>Sets the high endpoint.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1"> </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/images/rover.jpg
==============================================================================
Binary file. No diff available.
Added: trunk/libs/polygon/doc/images/vlsi.jpg
==============================================================================
Binary file. No diff available.
Added: trunk/libs/polygon/doc/images/voronoi.png
==============================================================================
Binary file. No diff available.
Added: trunk/libs/polygon/doc/images/voronoi2.png
==============================================================================
Binary file. No diff available.
Added: trunk/libs/polygon/doc/images/voronoi3.png
==============================================================================
Binary file. No diff available.
Added: trunk/libs/polygon/doc/images/voronoi4.png
==============================================================================
Binary file. No diff available.
Modified: trunk/libs/polygon/doc/index.htm
==============================================================================
--- trunk/libs/polygon/doc/index.htm (original)
+++ trunk/libs/polygon/doc/index.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -2,41 +2,71 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><!--
Copyright 2009-2010 Intel Corporation
license banner
--->
-<title>Boost Polygon Library: Main Page</title>
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1">
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
+--><title>Boost Polygon Library: Main Page</title>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
<div style="padding: 5px;" align="center">
- <img border="0" src="images/boost.png" width="277" height="86"><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
+ <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
</a>
</div>
<div style="margin: 5px;">
<h3 class="navbar">Contents</h3>
<ul>
<li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
<li>Coordinate Concept</li>
<li>Interval Concept</li>
- <li>
- Point Concept</li>
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li>Polygon 90 With Holes Concept</li>
+ <li>Polygon 45 Concept</li>
+ <li>Polygon 45 With Holes Concept</li>
+ <li>Polygon Concept</li>
+ <li>Polygon With Holes Concept</li>
+ <li>Polygon 90 Set Concept</li>
+ <li>Polygon 45 Set Concept</li>
+ <li>Polygon Set Concept</li>
+ <li>Connectivity Extraction 90</li>
+ <li>Connectivity Extraction 45</li>
+ <li>Connectivity Extraction</li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br />
+</a></li>
+ <li>Voronoi Benchmark<br />
+ </li>
+
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
+</a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br />
+ </li>
+ <li>Voronoi Utils<br />
+ </li>
+
+
+
</ul>
<h3 class="navbar">Other Resources</h3>
<ul>
@@ -46,18 +76,21 @@
<li>Performance Analysis</li>
<li>Layout Versus Schematic Tutorial</li>
<li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
</ul>
</div>
<h3 class="navbar">Polygon Sponsor</h3>
<div style="padding: 5px;" align="center">
- <img border="0" src="images/intlogo.gif" width="127" height="51">
+ <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
+ </a>
</div>
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
<!-- End Header -->
-<br>
+<br />
<p>
</p><h1>THE BOOST.POLYGON LIBRARY</h1>
<p>The Boost.Polygon library provides algorithms focused on manipulating planar
@@ -67,21 +100,38 @@
An example of the disjoint-union (XOR) of figure a and figure b is shown below
in figure c.
These so-called Boolean algorithms are of significant interest in GIS (Geospatial Information
-Systems), VLSI CAD as well al other fields of CAD, and many more application
+Systems), VLSI CAD as well all other fields of CAD, and many more application
areas, and providing them is the primary focus of this library. The
Boost.Polygon library is not intended to cover all of computational
geometry in its scope, and provides a set of capabilities for working with
coordinates, points, intervals and rectangles that are needed to support
-implementing and interacting with polygon data structures and algorithms. </p><img border="0" src="images/hand.png" width="837" height="277"><p>
-The coordinate data type is a template parameter of all data types and
-algorithms provided by the library, and is expected to be integral.
-Floating point coordinate data types are not supported by the algorithms
-implemented in the library due to the fact that the achieving floating point
-robustness implies a different set of algorithms and generally platform specific
-assumptions about floating point representations.
-For additional detailed discussion of the library and its implementation
-including benchmark comparisons with other open source alternatives please see
-the paper and
+implementing and interacting with polygon data structures and algorithms. </p><img src="images/hand.png" border="0" height="277" width="837" /><p>
+One of the important features of the library is the implementation of
+the generic sweepline algorithm to construct Voronoi diagrams of points and linear segments in 2D (developed
+as part of the GSoC 2010 program). Voronoi diagram data structure has
+applications in image segmentation, optical character recognition,
+nearest neighbor queries execution. It is closely related with the other
+computational geometry concepts: Delaunay triangulation, medial axis,
+straight skeleton, the largest empty circle. The Boost.Polygon library
+provides interface to construct Voronoi diagram of points figure a and
+line segments figure b (the last could be used to discretize any
+two-dimensional curve). Figure c contains the example of the medial axis of the
+non-convex polygon. The implementation outperforms most of the known
+commercial and non-commercial libraries in both efficiency and
+numerical robustness aspects. You may find more details on the topic at the Voronoi main page.<br />
+
+</p>
+<p><img src="images/voronoi.png" border="0" height="300" width="900" /></p>
+<p>The coordinate data type is a template parameter of all data types
+and algorithms provided by the library, and is expected to be integral.
+Floating point coordinate data types are not supported by the
+algorithms implemented in the library due to the fact that the
+achieving floating point robustness implies a different set of
+algorithms and generally platform specific assumptions about floating
+point representations.
+For additional detailed discussion of the library and its
+implementation including benchmark comparisons with other open source
+alternatives please see the paper and
<a href="GTL_boostcon_draft03.pdf">presentation</a> from
<a href="http://www.boostcon.com/home">boostcon</a> 2009 as well as a detailed
<a href="analysis.htm">analysis</a> of the runtime complexity of
@@ -95,40 +145,39 @@
intended to demonstrate what could be achieved with ease by a C++-concepts based
library interface, but is implemented based on current language features. This API makes
the following code snippet that operates on non-library geometry types possible:</p>
-<p:colorscheme
- colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00"/>
+<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00">
-<div v:shape="_x0000_s1026" class="O">
- <div style="text-align:justify;mso-char-wrap:1;mso-kinsoku-overflow:1">
+</p:colorscheme><div v:shape="_x0000_s1026" class="O">
+ <div style="text-align: justify;">
<nobr>
- <span style="font-family: Courier New; mso-ascii-font-family: Courier New; mso-bidi-font-family: Arial; mso-hansi-font-family: Courier New">
- void foo(list<CPolygon>& result, const list<CPolygon>& a, </span></nobr><br>
- <span style="font-family: Courier New">
+ <span style="font-family: Courier New;">
+ void foo(list<CPolygon>& result, const list<CPolygon>& a, </span></nobr><br />
+ <span style="font-family: Courier New;">
</span><nobr>
- <span style="font-family: Courier New; mso-ascii-font-family: Courier New; mso-bidi-font-family: Arial; mso-hansi-font-family: Courier New">
+ <span style="font-family: Courier New;">
const list<CPolygon>&
b, int deflateValue) { </span></nobr></div>
- <div style="text-align:justify;mso-char-wrap:1;mso-kinsoku-overflow:1">
+ <div style="text-align: justify;">
<nobr>
-<span style="font-family: Courier New; mso-ascii-font-family: Courier New; mso-bidi-font-family: Arial; mso-hansi-font-family: Courier New">
+<span style="font-family: Courier New;">
CBoundingBox domainExtent; </span></nobr></div>
- <div style="text-align:justify;mso-char-wrap:1;mso-kinsoku-overflow:1">
+ <div style="text-align: justify;">
<nobr>
- <span style="font-family: Courier New; mso-ascii-font-family: Courier New; mso-bidi-font-family: Arial; mso-hansi-font-family: Courier New">
- <span style="mso-spacerun:yes"> </span> using namespace boost::polygon::operators; </span></nobr></div>
- <div style="text-align:justify;mso-char-wrap:1;mso-kinsoku-overflow:1">
+ <span style="font-family: Courier New;">
+ <span style=""> </span> using namespace boost::polygon::operators; </span></nobr></div>
+ <div style="text-align: justify;">
<nobr>
- <span style="font-family: Courier New; mso-ascii-font-family: Courier New; mso-bidi-font-family: Arial; mso-hansi-font-family: Courier New">
- <span style="mso-spacerun:yes"> </span>
+ <span style="font-family: Courier New;">
+ <span style=""> </span>
boost::polygon::extents(domainExtent, a); </span></nobr></div>
- <div style="text-align:justify;mso-char-wrap:1;mso-kinsoku-overflow:1">
+ <div style="text-align: justify;">
<nobr>
- <span style="font-family: Courier New; mso-ascii-font-family: Courier New; mso-bidi-font-family: Arial; mso-hansi-font-family: Courier New">
- <span style="mso-spacerun:yes"> </span>result += (b &
+ <span style="font-family: Courier New;">
+ <span style=""> </span>result += (b &
domainExtent) ^ (a - deflateValue); </span></nobr></div>
- <div style="text-align:justify;mso-char-wrap:1;mso-kinsoku-overflow:1">
+ <div style="text-align: justify;">
<nobr>
- <span style="font-family: Courier New; mso-ascii-font-family: Courier New; mso-bidi-font-family: Arial; mso-hansi-font-family: Courier New">
+ <span style="font-family: Courier New;">
}</span></nobr></div>
</div>
<p>In the code snippet above the hypothetical polygon type CPolygon has been
@@ -139,10 +188,11 @@
It is considerably more typing to describe this usage of the API than to code
it, and the description is not much clearer than the code itself.
A picture is worth a thousand words.</p>
-<p><img border="0" src="images/foo.PNG" width="432" height="371"></p>
-<p>In Boost.Polygon operations such as those shown above are free functions named for what they do, or are overloads of C++ operators that make it
-easy to infer from reading the code what to expect. Operators are
-contained in the namespace <font face="Courier New">boost::polygon::operators</font>
+<p><img src="images/foo.PNG" border="0" height="371" width="432" /></p>
+<p>In Boost.Polygon operations such as those shown above are free
+functions named for what they do, or are overloads of C++ operators
+that make it easy to infer from reading the code what to expect.
+Operators are contained in the namespace <font face="Courier New">boost::polygon::operators</font>
so that they can be used outside the <font face="Courier New">boost::polygon</font>
namespace without bringing in the entire <font face="Courier New">boost::polygon</font>
namespace. Following the
@@ -179,20 +229,27 @@
<li>connectivity_extraction_usage.cpp
Using the connectivity extraction algorithm to build a connectivity
graph on polygons</li>
- <li>property_merge_usage.cpp
+
+ <li>property_merge_usage.cpp
Using the n-layer map-overlay algorithm on polygon data</li>
+
</ul>
-<li>Tutorials:
+</li><li>Tutorials:
<ul>
<li>Layout Versus Schematic Learn how to
apply Boost.Polygon capabilities to implement a simplified circuit
extraction application</li>
<li>Minkowski Sum Learn how to
apply Boost.Polygon capabilities to implement Minkowski sum of polygon sets</li>
+ <li>Voronoi Basic Tutorial Learn how
+ to construct, traverse, visualize, associate data with Voronoi diagrams without digging into the library details.</li>
+ <li>Voronoi Advanced Tutorial
+ Learn how to configure the Voronoi builder and Voronoi diagram
+ data structure with the user provided coordinate types. </li>
</ul>
-</ul>
+</li></ul>
<p>We would like to thank: Thomas Klimpel, Frank Mori Hess, Barend Gehrels,
@@ -206,17 +263,17 @@
process and Fernando Cacciola for graciously serving as review manager.</p>
- <tr>
+ </td></tr><tr>
<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
</td>
<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-<table class="docinfo" rules="none" frame="void" id="table2">
+<table class="docinfo" id="table2" frame="void" rules="none">
<colgroup>
- <col class="docinfo-name"><col class="docinfo-content">
+ <col class="docinfo-name" /><col class="docinfo-content" />
</colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
<tr>
<th class="docinfo-name">Copyright:</th>
<td>Copyright © Intel Corporation 2008-2010.</td>
@@ -229,6 +286,6 @@
<a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt>)</td>
</tr>
-</table>
+</tbody></table>
-</html>
\ No newline at end of file
+</td></tr></tbody></table></body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_advanced_tutorial.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_advanced_tutorial.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,481 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Advanced Tutorial</title></head><body>
+<h1>Voronoi Advanced Tutorial<br>
+</h1>
+
+This tutorial consists of two parts. The first one provides two
+examples of a real world problems that default configuration of Voronoi
+library is capable to solve. By default configuration we mean the one
+that accepts
+signed 32-bit integer and outputs floating-point (64-bit
+double) coordinates. We provide those examples to convince even the
+most skeptical users that they probably don't need to configure library
+for higher-precision input or output coordinate types. However if the
+posed problem really requires those, fully featured configuration of
+both input and output coordinate types is provided in the second part
+of this tutorial.<br>
+
+<h2>Red Planet</h2>
+
+<h3>Problem Statement</h3>
+
+<img style="width: 665px; height: 369px;" alt="" src="images/rover.jpg"><br>
+
+<br>
+
+Yes, we are going to talk about Mars. So lets imagine that NASA is
+planning to send a new robot to Mars. Each day center situated on Earth
+will send a destination point coordinates the robot needs to reach by
+the end of the day. Of course we'd like to save as much energy as
+possible thus choosing the shortest possible path. This would be a
+straight line in a perfect world (we don't consider curvature of
+surface), but situation becomes more complicated as there are some
+rocks and wells on Mars our robot can't go through. Behind of those our
+robot has some dimensions that might not allow it to pass narrow places.<br>
+
+<h3>Application of Voronoi diagram</h3>
+
+The problem above could be solved using Voronoi diagram. The first
+stage would be to discretize obstacles (rocks and wells) with
+polylines. Afterwards we will compute Voronoi diagram of the input set
+of segments. As each Voronoi edge is equidistant from the two closest
+sites we are able to filter edges the robot won't be able to pass due
+to it's dimensions. The last step would be to run a bit optimized A*
+algorithm to find
+the shortest or at least suboptimal path and we are done.<br>
+
+<h3>Discretization of input geometries</h3>
+
+To show how good is the default input coordinate type provided by the
+Voronoi library
+we will discretize the whole area of Mars. That will be approximately
+1.44 * 10^8 square kilometres that is equal to 1.44 *
+10^18 square centimetres, which could be snapped to the integer
+grid with a side of 1.2 * 10^9 centimetres. To make the Voronoi
+graph
+precise on the boundaries of that grid we will replicate input map 9
+times (3x3), thus Voronoi diagram within a central piece will
+provide us with a correct connectivity graph. This step will increase
+the size of our grid to 3.6 * 10^9 centimetres that is less than 2^32.
+So we are able to discretize the Red Planet's surface within a 1
+centimetre
+precision using the default input coordinate type (signed 32-bit
+integer). That would imply maximum absolute error to be
+equal up to 0.5 centimetres per coordinate. Considering the radius of
+our robot to be
+0.3 metres and for security reasons avoiding any large enough obstacles
+that are within 1 metre distance from it that error would be irrelevant.<br>
+
+<span style="color: rgb(0, 0, 0); font-family: sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 13px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; background-color: rgb(249, 249, 249); display: inline ! important; float: none;"></span>
+<h3>Output analysis</h3>
+
+Estimates of the resulting Voronoi diagram precision were already
+explained here.
+So to avoid those computations again we will simply state that the
+maximum absolute error of the output geometries will be on the grid
+boundaries and will be equal to 2^-16 centimetres, which is
+approximately equal to 150 nanometres and is 100 times larger than
+a radius of a complex molecule. We would like to notice that the
+absolute error of the discretization step is much higher than the one
+produced by the Voronoi diagram construction algorithm.
+<h2>VLSI Design</h2>
+
+<h3>Problem Statement</h3>
+
+<img style="width: 400px; height: 283px;" alt="" src="images/vlsi.jpg"><br>
+
+<br>
+
+Very-large-scale integration (VLSI) is the
+process of creating
+integrated circuits by combining thousands of transistors into a single
+chip. Considering the fact that it may take weeks or months to get an
+integrated circuit manufactured, designers often spend large amounts of
+time analyzing their layouts to avoid costly mistakes. One of the
+common static analysis checks is minimum distance requirement between
+the components of an integrated circuit (distance should be not less
+than
+specified value).<br>
+
+<h3>Application of Voronoi diagram</h3>
+
+It appears that the minimum distance between components of the input
+set of points and segments corresponds to the one of the Voronoi
+diagram edges. This means that we can iterate through each edge of
+the Voronoi graph, extract the pair of input geometries that form it
+and find
+the distance between those. As the total amount of such edges is O(N)
+value
+(N - is the number of input geometries) the minimum distance could be
+efficiently find in a linear time once we construct the diagram.<br>
+
+<h3>Discretization of input geometries</h3>
+
+The average size of the modern CPUs is around 2.5 x 2.5 centimetres.
+Snapping this to the 32-bit integer grid will give discretization
+precision of 2.5 / 2^33 centimetres or 3 picometres that is 10 times
+smaller value than radius of an atom. That would be probably good
+enough precision even for a few next generations of processors.<br>
+
+<h3>Output analysis</h3>
+
+The maximum absolute error of the output geometries will be 2.5 / 2^47
+centimetres or 0.2 femtometres that is 10 times smaller value than
+the radius of an electron. However in this particular case we are not
+interested in the precision of the output, rather in its topology. As
+it was noticed on
+the Voronoi main page very small edges
+are removed from the Voronoi diagram. However user should not worry
+because the edge that correspond to the minimal distance won't be among
+those. That means that we would be able to 100% correctly identify a
+pair of closest objects within the discretization precision.<br>
+
+<h2>Conclusions</h2>
+
+The above two examples show usage of the default Voronoi coordinate
+types
+in the macro and micro world. The main point of those was to give user
+understanding of a scale the default coordinate types provides. There
+are
+two main points we didn't mention before, but that would be relevant to
+the most real world problems:<br>
+
+<ul>
+
+ <li>The absolute error of the coordinates of the output Voronoi
+diagram
+inside the 32-bit integer discretization grid is slightly smaller than
+the absolute error of discretization itself, thus could be neglected at
+all.</li>
+ <li>In both problems above we didn't consider error of measurement.
+For example: is it possible to construct a map of the Mars within the
+0.5
+centimetres precision, or to get coordinates of the circuit parts
+withing the subatomic precision? I guess the answer for both questions
+would be "No". And that actually means that the error of the
+discretization
+step could be neglected comparing to the error produced by the
+measuring
+devices.<br>
+ </li>
+</ul>
+
+The second statement means that there is actually no point to provide
+implementation that operates with floating-point input coordinates,
+because those always could be snapped to the integer grid. In case you
+are not satisfied with the precision that the 32-bit integer grid
+provides or would like to retrieve coordinates of the output geometries
+within a smaller
+relative error, follow the next paragraph.<br>
+
+<h2>Voronoi Coordinate Types Configuration</h2>
+
+In the following chapter we are going to extend input coordinate type
+to the 48-bit signed
+integer and output coordinate type to the 80-bit IEEE floating-point
+type
+(long double). The code for this chapter is available in voroni_advanced_tutorial.cpp.
+While it won't be possible to compile it using the MSVC compiler (it
+doesn't
+support 80-bit long double type; ieee754.h header is required), it
+should give a clear understanding of how the library supports the user
+provided coordinate types.<br>
+
+<br>
+
+So the main step would be to declare the voronoi coordinate type traits
+that satisfy set of restrictions explained here:<br>
+
+<br>
+
+<span style="font-family: Courier New,Courier,monospace;">struct
+my_voronoi_ctype_traits {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef boost::int64_t int_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef detail::extended_int<3> int_x2_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef detail::extended_int<3> uint_x2_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef detail::extended_int<128> big_int_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef fpt80 fpt_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef fpt80 efpt_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef my_ulp_comparison ulp_cmp_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef my_fpt_converter to_fpt_converter_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef my_fpt_converter to_efpt_converter_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">};<br>
+<br>
+</span>It is always better to use C++ built-in types wherever it's
+possible. That's why we use the 64-bit signed integer type to handle
+our
+input coordinates. <span style="font-family: Courier New,Courier,monospace;">int_x2_type</span>
+and <span style="font-family: Courier New,Courier,monospace;">uint_x2_type</span>
+is required to handle 96-bit signed/unsigned integers. As there is no
+such built-in type we use library provided efficient fixed integer
+type.
+The big integer type should be capable to handle 48 * 64 bit integers,
+that is
+less than 32 * 128, and so far we are good with <span style="font-family: Courier New,Courier,monospace;">extended_int<128></span>
+type. We use the same floating point type for both <span style="font-family: Courier New,Courier,monospace;">fpt_type</span>
+and <span style="font-family: Courier New,Courier,monospace;">efpt_type</span>
+as it has enough exponent bits to represent both 48 * 32 bit and 48 *
+64 bit integers (that is also the reason we don't need two
+floating-point converter structures). The <span style="font-family: Courier New,Courier,monospace;">ulp_cmp_type</span>
+structure checks weather two IEEE floating-point values are within the
+given signed integer ulp range (we won't analyze corresponding code
+here as it requires deep understanding of the <a href="http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html">floating-point
+architecture</a> and its <a href="../boost/polygon/detail/voronoi_ctypes.hpp">usage to compare
+floating-point values</a>), but just to mention the declaration is
+following:<br>
+
+<span style="font-family: Courier New,Courier,monospace;"></span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">struct
+my_ulp_comparison {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> enum
+Result {</span><span style="font-family: Courier New,Courier,monospace;"><br>
+ LESS = -1,</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+EQUAL = 0,</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+MORE = 1</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> };</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> Result
+operator()(fpt80 a, fpt80 b, unsigned int maxUlps) const;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">};<br>
+<br>
+</span>The last step would be to declare the <span style="font-family: Courier New,Courier,monospace;">my_fpt_converter</span>
+structure (converts the integer types to the floating-point type):<br>
+
+<br>
+
+<span style="font-family: Courier New,Courier,monospace;">struct
+my_fpt_converter {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+template <typename T></span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> fpt80
+operator()(const T& that) const {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+return static_cast<fpt80>(that);</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> }</span><br style="font-family: Courier New,Courier,monospace;">
+
+<br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+template <size_t N></span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> fpt80
+operator()(const typename detail::extended_int<N> &that)
+const {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+fpt80 result = 0.0;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+for (size_t i = 1; i <= (std::min)((size_t)3, that.size()); ++i) {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+if (i != 1)</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+result *= static_cast<fpt80>(0x100000000ULL);</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+result += that.chunks()[that.size() - i];</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+}</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+return (that.count() < 0) ? -result : result;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> }</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">};<br>
+<br>
+</span>At this point we are done with declaration of the Voronoi
+coordinate type traits. The next step is to declare the Voronoi diagram
+traits:<br>
+
+<br>
+
+<span style="font-family: Courier New,Courier,monospace;">struct
+my_voronoi_diagram_traits {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef fpt80 coordinate_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef struct {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+template <typename CT></span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+fpt80 operator()(const CT& that) const {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+return static_cast<fpt80>(that);</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+}</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> }
+ctype_converter_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef detail::point_2d<coordinate_type> point_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef voronoi_cell<coordinate_type> cell_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef voronoi_vertex<coordinate_type> vertex_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef voronoi_edge<coordinate_type> edge_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+typedef struct {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> public:</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+enum { ULPS = 128 };</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+bool operator()(const point_type &v1, const point_type &v2)
+const {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+return (ulp_cmp(v1.x(), v2.x(), ULPS) == my_ulp_comparison::EQUAL
+&&</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+ulp_cmp(v1.y(), v2.y(), ULPS) == my_ulp_comparison::EQUAL);</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+}</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+private:</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+my_ulp_comparison ulp_cmp;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;"> }
+vertex_equality_predicate_type;</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">};</span><br>
+
+<span style="font-family: Courier New,Courier,monospace;"></span><br>
+
+Above we simply declared the Voronoi primitive types, type converter
+and vertex
+equality predicate using the new coordinate type and corresponding ulp
+comparison structure. As we are done with the declaration of the
+coordinate
+type specific structures we are ready to proceed to the construction
+step itself. The first step would be to initialize voronoi_builder
+structure with a set of random points:<br>
+
+<br>
+
+<span style="font-family: Courier New,Courier,monospace;">// Random
+generator and distribution. MAX is equal to 2^48.</span><br>
+
+<span style="font-family: Courier New,Courier,monospace;">boost::mt19937_64
+gen(std::time(0));</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">boost::random::uniform_int_distribution<boost::int64_t>
+distr(-MAX, MAX-1);</span><span style="font-family: Courier New,Courier,monospace;"><br>
+// Declaring and configuring Voronoi builder with the new coordinate
+type traits.<br>
+voronoi_builder<boost::int64_t, my_voronoi_ctype_traits> vb;</span><span style="font-family: Courier New,Courier,monospace;"></span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">// Voronoi
+builder initialization step.<br>
+for (size_t i = 0; i < GENERATED_POINTS; ++i) {</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+boost::int64_t x = distr(gen);</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+boost::int64_t y = distr(gen);</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">
+vb.insert_point(x, y);</span><br style="font-family: Courier New,Courier,monospace;">
+
+<span style="font-family: Courier New,Courier,monospace;">}<br>
+<br>
+</span>The second step would be to generate the Voronoi diagram and
+this is done as before with the two lines of code:<br>
+
+<br>
+
+<span style="font-family: Courier New,Courier,monospace;">// Declaring
+and configuring Voronoi diagram structure with the new coordinate type
+traits.<br>
+voronoi_diagram<fpt80, my_voronoi_diagram_traits> vd;</span><br>
+
+<span style="font-family: Courier New,Courier,monospace;">vb.construct(&vd);<br>
+<br>
+</span>From this point the user can operate with the Voronoi diagram
+data structure
+and in our tutorial we output some simple stats of the resulting
+Voronoi graph. Probably the hardest part of this tutorial is
+the declaration of the ulp comparison structure. The library provides
+efficient well-commented cross-platform implementation for 64-bit
+floating-point type (double). So the best advice would be to follow
+that implementation, but before doing that really consider if the
+default
+coordinate types are not capable to solve your problem.<br>
+
+<br>
+
+<table class="docinfo" id="table1" frame="void" rules="none">
+
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup>
+ <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_basic_tutorial.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_basic_tutorial.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+
+
+
+
+
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Basic Tutorial</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
+<h1>Voronoi Basic Tutorial<br>
+</h1>
+
+<p>In this tutorial we will cover the basic usage of the Boost.Polygon
+Voronoi library that should be enough for the 95% of cases. Below we will
+discuss the following topics:<br>
+</p>
+
+<ul>
+
+ <li>preparing input geometries;<br>
+ </li>
+ <li>Voronoi diagram construction;</li>
+
+ <li>Voronoi graph traversal;<br>
+ </li>
+
+ <li>associating the user data with the Voronoi primitives;</li>
+ <li>Voronoi diagram discretization and rendering.</li>
+</ul>
+
+In the example that goes through this tutorial (voronoi_basic_tutorial.cpp)
+we
+are going to construct the Voronoi diagram of a few points and
+segments.
+On the image below one may see the corresponding rendered Voronoi
+graph. The primary Voronoi edges
+are marked with
+the black color, non-primary with green, input geometries have blue
+color. In
+case you forgot, we split each input segment onto three sites (segment
+itself and both endpoints), edges that go between those sites are
+considered to be non-primary.<br>
+
+<br>
+
+<img style="border: 2px solid ; width: 300px; height: 300px;" alt="" src="images/voronoi4.png"><br>
+
+<br>
+
+And before you proceed don't forget to:<span style="font-family: Courier New,Courier,monospace;"><br>
+<br>
+#include "boost/polygon/voronoi.hpp"<br>
+using boost::polygon;</span><br>
+
+<h2>Preparing Input Geometries</h2>Below is the example of how the user provided point and segment classes might look like:<br>
+<br><span style="font-family: Courier New,Courier,monospace;">struct Point {<br> int a;<br>
+ int b;<br>
+ Point (int x, int y) : a(x), b(y) {}<br>
+
+};</span><span style="font-family: Courier New,Courier,monospace;"><br>
+<br>struct Segment {</span><span style="font-family: Courier New,Courier,monospace;"></span><br>
+<span style="font-family: Courier New,Courier,monospace;">
+ Point p0;<br>
+ Point p1;<br>
+ Segment (int x1, int y1, int x2, int y2) : p0(x1, y1), p1(x2, y2) {}<br>
+</span><span style="font-family: Courier New,Courier,monospace;"></span>
+
+<span style="font-family: Courier New,Courier,monospace;">};<br>
+<br>
+</span>As we are going to use the default routines defined in the
+voronoi.hpp header to construct the Voronoi diagram, we are required to map
+our point and segment classes to the corresponding Boost.Polygon concepts:<br>
+<br>
+<span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">template <></span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"><br>
+struct geometry_concept<Point> { typedef point_concept type; };</span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"></span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! imp
ortant; float: none;"> <span class="Apple-converted-space"></span></span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"></span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inli
ne ! important; float: none;">template <></span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">struct point_traits<</span><span style="font-family: Courier New,Courier,monospace;">Point</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal;
widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">> {</span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"> typedef int coordinate_type;</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows:
2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"><br>
+ <span class="Apple-converted-space"> </span></span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"> static inline coordinate_type get(const </span><span style="font-family: Courier New,Courier,monospace;">Point</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-tra
nsform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">& point,<span class="Apple-converted-space"> </span></span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">orientation_2d orient) {<br>
+ return </span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">(orient == HORIZONTAL) ? point.a : point.b;</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"></span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spaci
ng: 0px; font-size: medium;"><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"> }<br>
+};</span><br>
+<span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">
+<br>
+template <><br>
+</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">struct geometry_concept<Segment> { typedef segment_concept type; };<br>
+<br>
+</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">template <></span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;">
+<span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">struct point_traits<</span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">> {</span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: norm
al; widows: 2; word-spacing: 0px; font-size: medium;">
+<span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"> typedef int coordinate_type;<br>
+ typedef Point point_type;<br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;">
+</span>
+<span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"> <span class="Apple-converted-space"> </span></span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;">
+<span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"> static inline coordinate_type get(const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">& segment,<span class="Apple-converted-space"> direction_1d dir</span></span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: norm
al; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">) {<br>
+ return </span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;">dir.to_int() ? segment.p1() : segment.p0();</span><span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"></span><br style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spaci
ng: 0px; font-size: medium;">
+<span style="color: rgb(0, 0, 0); font-family: 'Courier New'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium; display: inline ! important; float: none;"> }<br>};</span><br>
+<br>
+It's also possible to use the native Boost.Polygon types as point_data and segment_data, that won't require the above mapping.<br>
+<br>
+So once we are done we can create the sample input:<br>
+
+<br>
+
+<span style="font-family: Courier New,Courier,monospace;">std::vector<Point>
+points;<br>
+points.push_back(Point(0, 0));<br>
+points.push_back(Point(1, 6));<br>
+std::vector<Segment> segments;<br>
+segments.push_back(Segment(-4, 5, 5, -1));<br>
+segments.push_back(Segment(3, -11, 13, -1));</span><span style="font-family: Courier New,Courier,monospace;"><br>
+</span>
+<h2>Construction of the Voronoi Diagram<br>
+</h2>At this point we are ready to construct the Voronoi diagram:<br>
+<span style="font-family: Courier New,Courier,monospace;"><br>
+</span><span style="font-family: Courier New,Courier,monospace;">
+voronoi_diagram<double> vd;<br>
+construct_voronoi(points.begin(), points.end(), segments.begin(), segments.end(), &vd);<br>
+</span><br>
+So brief, isn't that awesome!<br>
+
+<h2>Traversing Voronoi Graph</h2>
+
+Voronoi graph traversal is the basic
+operation one would like to do once the Voronoi diagram is constructed.
+There are three ways to do that and we are going to cover all of them:<br>
+
+<ul>
+
+ <li>simply iterating over the Voronoi edges (counts each edge twice):<br>
+ <span style="font-family: Courier New,Courier,monospace;"><br>
+int iterate_primary_edges1(const voronoi_diagram<double> &vd)
+{<br>
+ int result = 0;<br>
+ for (voronoi_diagram<double>::const_edge_iterator it =
+vd.edges().begin();<br>
+ it != vd.edges().end(); ++it) {<br>
+ if (it->is_primary())<br>
+ ++result;<br>
+ }<br>
+ return result;<br>
+}</span><br>
+ <span style="font-family: Courier New,Courier,monospace;"> </span><br>
+ </li>
+ <li>iterating over the Voronoi cells and then traversing edges around
+each cell (counts each edge twice):<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">int
+iterate_primary_edges2(const voronoi_diagram<double> &vd) {<br>
+ int result = 0;<br>
+ for (voronoi_diagram<double>::const_cell_iterator it =
+vd.cells().begin();<br>
+ it != vd.cells().end(); ++it) {<br>
+ const voronoi_diagram<double>::cell_type
+&cell = *it;<br>
+ const voronoi_diagram<double>::edge_type *edge
+= cell.incident_edge();<br>
+ // This is convenient way to iterate edges around
+Voronoi cell.<br>
+ do {<br>
+ if (edge->is_primary())<br>
+ ++result;<br>
+ edge = edge->next();<br>
+ } while (edge != cell.incident_edge());<br>
+ }<br>
+ return result;<br>
+}</span><br>
+ <br>
+ </li>
+ <li>iterating over the Voronoi
+vertices and then traversing edges around each vertex (the number of the
+iterations through each edge is equal to the number of finite endpoints
+of the edge):<span style="font-family: Courier New,Courier,monospace;"></span><br>
+ <span style="font-family: Courier New,Courier,monospace;">int
+iterate_primary_edges3(const voronoi_diagram<double> &vd) {<br>
+ int result = 0;<br>
+ for (voronoi_diagram<double>::const_vertex_iterator it =
+vd.vertices().begin();<br>
+ it != vd.vertices().end(); ++it) {<br>
+ const voronoi_diagram<double>::vertex_type
+&vertex = *it;<br>
+ const voronoi_diagram<double>::edge_type *edge
+= vertex.incident_edge();<br>
+ // This is convenient way to iterate edges around
+Voronoi vertex.<br>
+ do {<br>
+ if (edge->is_primary())<br>
+ ++result;<br>
+ edge = edge->rot_next();<br>
+ } while (edge != vertex.incident_edge());<br>
+ }<br>
+ return result;<br>
+}</span></li>
+</ul>
+
+This should give a very nice idea on how to do the Voronoi
+diagram traversal. Notice that while the output from the first two methods should
+be the same, it wouldn't for the third one. The reason is that in the
+last case we will iterate only once through the edges with a single
+finite endpoint and will skip all the edges with no finite endpoints.<br>
+
+<h2>Associating User Data with Voronoi Primitives</h2>
+
+A few simple cases of associating the user data with the Voronoi primitives are
+following:<br>
+
+<ul>
+
+ <li>associating number of incident edges with each cell, vertex;</li>
+ <li>associating color information with each edge;</li>
+ <li>using DFS or BFS on the Voronoi graph requires to mark visited
+edges/vertices/cells.</li>
+</ul>
+
+We will consider the first example and will associate the total number
+of incident edges with each cell.<br>
+
+Note: Each Voronoi primitive contains mutable pointer to the void* type,
+that allows to associate any type of data with it.<br>
+
+<br>
+
+<span style="font-family: Courier New,Courier,monospace;">std::vector<int>
+counts;</span><br>
+
+<span style="font-family: Courier New,Courier,monospace;">// This is
+required as reallocation of underlying vector will invalidate all the
+pointers.<br>
+counts.reserve(vd.num_cells());<br>
+for (voronoi_diagram<double>::const_cell_iterator it =
+vd.cells().begin();<br>
+ it != vd.cells().end(); ++it) {<br>
+ const voronoi_diagram<double>::cell_type &cell = *it;<br>
+ const voronoi_diagram<double>::edge_type *edge =
+cell.incident_edge();<br>
+ int count = 0;<br>
+ do {<br>
+ ++count;<br>
+ edge = edge->next();<br>
+ } while (edge != cell.incident_edge());<br>
+ counts.push_back(count);<br>
+ cell.data(&counts.back());<br>
+}</span><span style="font-family: Courier New,Courier,monospace;"><br>
+</span><br>
+
+Note: In the example above we could not use count variable
+without the vector, because the pointer to it will become invalid as soon as
+we leave the scope of the enclosing for-loop.<br>
+
+<h2>Rendering Voronoi Diagram</h2>
+
+There are two main issues that don't allow to strictly render the resulting
+Voronoi diagram using such rendering tools as OpenGL or DirectX.
+Those are:<br>
+
+<ul>
+
+ <li>Some of the Voronoi edges are infinite, so should be clipped;</li>
+ <li>Some of the Voronoi edge are parabolic arcs, so should be
+discretized.</li>
+</ul>
+
+Note: This would be the issues not only for rendering tools.
+Basically every task that requires diagram to be represented as a set
+of finite segments will fall into this category.<br>
+
+<br>
+
+All the above functionality is already implemented in the Voronoi
+utils.
+Before clipping an edge we are going to define the clipping rectangle.
+It is practical to choose it so that it wraps all the input geometries
+plus some offset.<br>
+
+<span style="font-family: Courier New,Courier,monospace;"><br>
+bounding_rectangle<double> bbox;<br>for (std::vector<Point>::iterator it = points.begin(); it != points.end(); ++it)<br>
+ bbox.update(it->a, it->b);<br>
+for (std::vector<Segment>::iterator it = segments.begin(); it != segments.end(); ++it) {<br>
+ bbox.update(it->p0.a, it->p0.b);<br>
+ bbox.update(it->p1.a, it->p1.b);<br>
+}<br>
+// Add 10% offset to the bounding rectangle.<br>
+bbox = voronoi_utils<double>::scale(bbox, 1.1);</span><span style="font-family: Courier New,Courier,monospace;"><br>
+</span><br>
+
+Now lets consider that we have the 3rd party library function that
+draws segments using the following prototype:<span style="font-family: Courier New,Courier,monospace;"><br>
+<br>
+void draw_segment(double x1, double y1, double x2, double y2);<br>
+<br>
+</span>Then the function that renders our diagram edges will have the
+following implementation:<br>
+
+<br>
+
+<span style="font-family: Courier New,Courier,monospace;">void
+render_diagram(const voronoi_diagram<double> &vd,<br>
+
+const voronoi_utils<double>::brect_type &bbox) {<br>
+ int visited = 1;<br>
+ for (voronoi_diagram<double>::const_edge_iterator it =
+vd.edges().begin();<br>
+ it != vd.edges().end(); ++it) {<br>
+ // We use data pointer to mark visited edges.<br>
+ it->data(&visited);<br>
+ // Don't render the same edge twice.<br>
+ if (it->twin()->data()) continue;<br>
+ voronoi_utils<double>::point_set_type polyline;<br>
+ if (it->is_linear())<br>
+ voronoi_utils<double>::clip(*it,
+bbox, polyline);<br>
+ else<br>
+ // Parabolic edges are always finite.<br>
+
+voronoi_utils<double>::discretize(*it, 1E-1, polyline);<br>
+ // Note: discretized edge segments may also lie
+outside of the bbox.<br>
+ for (int i = 1; i < polyline.size(); ++i)<br>
+ draw_segment(polyline[i-1].x(),
+polyline[i-1].y(),<br>
+
+polyline[i].x(), polyline[i].y());<br>
+ }<br>
+}<br>
+<br>
+</span>voronoi_visualizer.cpp
+contains a simple fully featured implementation of the Voronoi diagram
+renderer using the Qt libraries. It was used to generate all the .png
+drawings under the ./libs/polygon/example directory.<span style="text-decoration: underline;"><br>
+</span><span style="font-family: Courier New,Courier,monospace;">
+<br>
+</span>I hope the reader managed to get to this point and found the
+basic tutorial to be useful (in the end it's not so basic). Worth
+to notice that construction of the Voronoi diagram takes only two lines
+of code, everything else is about initializing input data structures,
+traversing Voronoi graph, associating data with the diagram primitives and
+using the Voronoi utilities. In the
+default mode the Voronoi diagram operates with the signed int (32-bit) input
+coordinate type and double (64-bit) output coordinate type. In the advanced Voronoi tutorial we
+explain why this is enough for the 95% of cases and how to expand the
+algorithm coordinate types for the other 5%.<br>
+
+<span style="font-family: Courier New,Courier,monospace;"></span><br>
+
+<table class="docinfo" id="table1" frame="void" rules="none">
+
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup>
+ <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_benchmark.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_benchmark.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,531 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+
+
+
+
+
+
+ <meta http-equiv="Content-Language" content="en-us">
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Benchmark</title></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="http://www.boost.org/"> </a></div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br>
+ </a></li>
+ <li>Voronoi Benchmark<br>
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br>
+ </a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br>
+ </li>
+ <li>Voronoi Utils</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
+
+ <h1>Voronoi Benchmark</h1>
+There are not many known Voronoi libraries that are capable to satisfy the
+following set of conditions:<br>
+ <ul>
+ <li>could handle input data sets of points and segments<br>
+</li>
+ <li>give exact warranties about the algorithm robustness and
+output topology<br>
+ </li>
+ <li>compute coordinates of the output geometries within the fixed relative precision<br>
+</li>
+ </ul>Below is the list of libraries included in this benchmark sorted by the number of conditions each of them satisfies:<br>
+ <ul>
+ <li>Boost.Polygon Voronoi - satisfies all three items above, implements sweep-line algorithm.<br>
+ </li>
+ <li>CGAL - satisfies the first two items, implements incremental algorithm. CGAL is a well-known
+library in the computational geometry area, especially for its
+robustness.<br>
+</li>
+ <li>S-Hull
+- doesn't satisfy any of the above items. S-Hull is a non-robust
+implementation of the sweep-hull algorithm used to construct Delaunay
+triangulation of a set of points.<br>
+ </li>
+ </ul>At the moment this benchmark includes only two robust implementations:
+Boost.Polygon Voronoi and CGAL. Thus we are considering comparison of
+those two to be of the most interest. <br>
+ <br>
+Other libraries (OpenVoronoi, Triangle) would be added to this benchmark
+incrementally (we are open for suggestions).<br>
+ <h2>Important<br>
+ </h2>While results of this benchmark show complete dominance of
+the Boost.Polygon Voronoi over the CGAL Delaunay Graph implementation,
+we would like to make it clear
+that both libraries use different approach to construct Voronoi
+diagram. Thus there are problems where the CGAL's incremental approach would
+be still more vital than the sweep-line algorithm (e.g. input sites are
+inserted as a live stream
+data).<br>
+ <h2>Voronoi Benchmark Details<br>
+ </h2>
+The benchmark consists of the two parts:<br>
+ <ul>
+ <li>The first one constructs the Voronoi diagram of a set of random points (voronoi_benchmark_points.cpp)</li>
+ <li>The second one constructs the Voronoi diagram of a set of random
+segments (voronoi_benchmark_segments.cpp)</li>
+ </ul>
+Below we list important benchmark details that should be considered while reviewing its results:<br>
+ <ul>
+ <li>We ensure that input data sets are the same for all
+libraries by initializing random generator with the same seed</li>
+ <li>We ensure that input data sets that consist of segments
+don't contain intersections using Boost.Polygon functionality</li>
+ <li>S-Hull's implementation doesn't process duplicate points
+properly, thus those are eliminated before the algorithm execution
+explicitly (Boost.Polygon Voronoi and CGAL do that implicitly) <br>
+ </li>
+
+ <li>There is no Voronoi diagram data structure in CGAL/S-Hull. That's why we use the segment Delaunay graph which is topologically
+dual to the Voronoi diagram</li>
+ <li>CGAL's and S-Hull's output Delaunay triangulation doesn't contain information
+about coordinates of the Voronoi vertices. We didn't include time to compute Voronoi vertices and memory
+storage required for those in this benchmark.<br>
+ </li>
+ <li>Both Boost.Polygon Voronoi and CGAL process each input
+segment
+as 3 input objects (segment itself and its endpoints), thus the running
+time and memory usage for Voronoi of segments would be at
+least 3 times
+slower than for Voronoi of points</li>
+
+
+ </ul>
+
+The benchmark was executed on the following two system configurations:<br>
+ <br>
+Hardware: Intel i5-7600 2.8 GHz, 4GiB RAM.<br>
+OS: Windows 7 Professional 32-bit.<br>
+Libraries: Boost 1.48.0, CGAL-4.0.<br>
+ <br>
+Hardware: Intel i5-7600 2.8 GHz, 4GiB RAM.<br>
+OS: Ubuntu 11.10 64-bit.<br>
+Libraries: Boost 1.48.0, CGAL-4.0, GMP 5.0.4, MPFR 3.1.0 + cumulative
+patch.<br>
+ <h2>Voronoi Benchmark Results</h2>
+ <h3>Random Points Benchmark</h3>
+ <table style="text-align: left; width: 100%; margin-left: auto; margin-right: auto;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td colspan="2" rowspan="1" style="vertical-align: top; text-align: center;">Test specification<br>
+ </td>
+ <td colspan="6" rowspan="1" style="vertical-align: top; text-align: center;">Average construction
+time (in secs)<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: center;">Number
+of Points<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">Number
+of Runs<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">Boost
+Win-32<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">CGAL
+Win-32<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">S-Hull Win-32<br>
+ </td>
+<td style="vertical-align: top; text-align: center;">Boost
+Linux-64<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">CGAL
+Linux-64<br>
+ </td><td style="vertical-align: top; text-align: center;">S-Hull Linux-64<br>
+ </td>
+
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">10<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">100000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000027<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000116<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000043<br>
+ </td>
+<td style="vertical-align: top; text-align: right;">0.000013<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000052<br>
+ </td><td style="vertical-align: top; text-align: right;">0.000012<br>
+ </td>
+
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">100<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">10000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000392<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.002649<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000521<br>
+ </td>
+<td style="vertical-align: top; text-align: right;">0.000192<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;"> 0.001150<br>
+ </td><td style="vertical-align: top; text-align: right;">0.000139<br>
+ </td>
+
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">1000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">1000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.004541<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.039140<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.007125<br>
+ </td>
+<td style="vertical-align: top; text-align: right;">0.002130<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.016680<br>
+ </td><td style="vertical-align: top; text-align: right;">0.002010<br>
+ </td>
+
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">10000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">100<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.047540<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.684090<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.091640<br>
+ </td>
+<td style="vertical-align: top; text-align: right;">0.022900<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.297900<br>
+ </td><td style="vertical-align: top; text-align: right;">0.028300<br>
+ </td>
+
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">100000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">10<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.530200<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;"> 16.904600<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">1.218000<br>
+ </td>
+<td style="vertical-align: top; text-align: right;">0.274000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">8.047000<br>
+ </td><td style="vertical-align: top; text-align: right;">0.432000<br>
+ </td>
+
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">1000000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">1<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">5.882000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">566.056000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">15.394000<br>
+ </td>
+<td style="vertical-align: top; text-align: right;">3.290000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">315.740000<br>
+ </td><td style="vertical-align: top; text-align: right;">6.350000<br>
+ </td>
+
+ </tr>
+ </tbody>
+ </table>
+ <br>
+ <table style="text-align: left;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_points_10.png"></td>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_points_100.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_points_1000.png"></td>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_points_10000.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_points_100000.png"></td>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_points_1000000.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_points_memory.png"><br>
+ </td>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_points_all.png"><br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <h3>Random Segments Benchmark</h3>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td colspan="2" rowspan="1" style="vertical-align: top; text-align: center;">Test specification<br>
+ </td>
+ <td colspan="4" rowspan="1" style="vertical-align: top; text-align: center;">Average construction
+time (in secs)</td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: center;">Number
+of Segments<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">Number
+of Runs<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">Boost
+Win-32<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">CGAL
+Win-32<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">Boost
+Linux-64<br>
+ </td>
+ <td style="vertical-align: top; text-align: center;">CGAL
+Linux-64<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">10<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">100000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000290<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.001047<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000165<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.000483<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">100<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">10000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.003655<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.014812<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.002006<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.007006<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">1000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">1000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.038158<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.177315<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.020440<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.084000<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">10000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">100<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">0.389470<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">2.561340<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;"> 0.209700<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">1.191900<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">100000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">10<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">4.031300<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">49.314600<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">2.228000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">23.538000<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; text-align: right;">1000000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">1<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">40.912000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">1640.830000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">22.250000<br>
+ </td>
+ <td style="vertical-align: top; text-align: right;">856.650000<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <br>
+ <table style="text-align: left;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_segments_10.png"></td>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_segments_100.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_segments_1000.png"></td>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_segments_10000.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_segments_100000.png"></td>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_segments_1000000.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_segments_memory.png"><br>
+ </td>
+ <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="../libs/polygon/benchmark/benchmark_results/plots/benchmark_segments_all.png"><br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <span style="font-weight: bold;"></span>
+ <h2>Voronoi Benchmark Conclusions</h2>
+The main conclusions for the benchmark results above are following:<br>
+ <ul>
+ <li>There is no input size range were CGAL would outperform
+Boost.Polygon Voronoi. Even considering the fact that we didn't include
+time it would take CGAL to compute coordinates of the Voronoi vertices.</li>
+ <li>The more interesting fact is that robust implementation of
+the Boost.Polygon Voronoi is faster than non-robust of
+S-Hull (except small input sets of around 100 points on Linux-64).<br>
+ </li>
+
+ <li>Logarithmic execution time shows that Boost.Polygon Voronoi and S-Hull
+have clear N*log(N) complexity, while this doesn't seem to be true for
+CGAL (at least for large input data sets).<br>
+ </li>
+ <li>Boost.Polygon Voronoi computes coordinates of the output
+Voronoi vertices within 64 machine epsilon precision. There are no such
+warranties for the CGAL library.<br>
+ </li>
+ <li>Boost.Polygon Voronoi of points is 4 times faster for small
+input data sets (10 points) and this factor grows up to 100 for large
+input data sets (1000000 points).</li>
+ <li>Boost.Polygon Voronoi of segments is 3 times faster for
+small input data sets (10 segments) and this factor grows up to 40 for
+large input data sets (1000000 segments).</li>
+ <li>Boost.Polygon
+Voronoi is capable to construct Voronoi of 10000 points or 1000
+segments in 0.02 seconds. This allows to produce real time frame rate
+for those quantities.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top"> </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_builder.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_builder.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,385 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+
+
+
+
+
+
+
+ <meta http-equiv="Content-Language" content="en-us">
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Builder</title></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="http://www.boost.org/"> </a></div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br>
+ </a></li>
+ <li>Voronoi Benchmark<br>
+ </li>
+ <li>Voronoi Builder</li>
+ <li><a href="voronoi_diagram.htm">Voronoi Diagram<br>
+ </a></li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br>
+ </li>
+ <li>Voronoi Utils</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
+ <h1>Voronoi Builder<br>
+ </h1>
+
+Voronoi builder is the event generator structure. It implements the <a href="http://www.ams.org/samplings/feature-column/fcarc-voronoi">sweepline
+algorithm</a>
+that scans a 2D space and generates two types of events:
+site events and circle events (we won't go into details what those are
+exactly). Each event is reported to the output data structure builder.
+The structure shares Voronoi name as the events generated by it
+correspond to the Voronoi diagram edges and vertices, thus giving
+enough information to construct the Voronoi diagram of a set of points
+and linear segments. The requirements for the input/output
+coordinate type of
+the builder geometries are not the same as for the rest of the
+Boost.Polygon library. The main differences are in the following:<br>
+ <ul>
+ <li>The input coordinate type is not required to be integral (while it
+still should be integer type)</li>
+ <li>The output coordinate type (for
+Voronoi vertices) is required to be IEEE-754 floating point type</li>
+ </ul>
+ <h2>Important</h2>
+
+
+We encourage users to use default static methods defined in the voronoi.hpp
+header to construct Voronoi diagram, however it's always possible to
+use Voronoi builder explicitly, especially if the user wants to drop
+the external dependencies such as MPL (metaprogramming library). So the
+following include set woudn't depend on any heavy external headers (except STL and boost/cstdint.hpp), even
+Boost.Polygon itself:<br>
+
+ <br>
+
+ <span style="font-family: Courier New,Courier,monospace;">#include <voronoi_builder.hpp></span><br style="font-family: Courier New,Courier,monospace;">
+
+ <span style="font-family: Courier New,Courier,monospace;">#include <voronoi_diagram.hpp></span><br style="font-family: Courier New,Courier,monospace;">
+
+ <span style="font-family: Courier New,Courier,monospace;">#include <voronoi_utils.hpp><br>
+ <br>
+ </span>This
+also gives a way to build Voronoi construction API on top of the
+Voronoi builder data strcture for the other Boost libraries.<br>
+ <h2>Declaration<br>
+ </h2>
+
+
+
+
+ <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">template
+<typename T,</span><br style="font-family: 'Courier New',Courier,monospace;">
+ <span style="font-family: 'Courier New',Courier,monospace;">
+typename CTT = detail::voronoi_ctype_traits<T>,</span><br style="font-family: 'Courier New',Courier,monospace;">
+ <span style="font-family: 'Courier New',Courier,monospace;">
+typename VP = detail::voronoi_predicates<CTT> ></span><br style="font-family: 'Courier New',Courier,monospace;">
+ <span style="font-family: 'Courier New',Courier,monospace;">class
+voronoi_builder;</span><br>
+ <br>
+ <span style="font-family: 'Courier New',Courier,monospace;">T</span></font>
+- specifies coordinate type of the input geometries (points and
+segments).<br>
+
+ <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>
+- defines input/output coordinate type used by VP.<br>
+
+ <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">VP</span></font>
+- predicate kernel, that provides builder with robust and
+efficient predicates and functors.<br>
+
+The Voronoi builder data structure is ready to use from the box with
+32-bit signed integer input coordinate type. The user may extend the
+input coordinate range to the other integer types (e.g. 64-bit
+integer), however this will also require manual set up of the
+coordinate type traits. Default voronoi_predicates<<font face="Courier New"><span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>>
+structure provides correct and efficient predicates as soon as types defined by <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>
+satisfy the requirements explained at the end of this page. In case those
+requirements are not satisfied for the user provided <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>,
+proper <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">VP</span></font>
+implementation is required.<span style="font-family: Courier New,Courier,monospace;"></span><br>
+<h2>Member Functions</h2>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: 'Courier New',Courier,monospace;">
+voronoi_builder()</td>
+ <td width="693">Default
+constructor.</td>
+ </tr>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">void insert_point(const int_type& x,<br>
+ const int_type& y)</span><br>
+ </td>
+ <td>Inserts a point object with
+the specified coordinates into the Voronoi builder.
+ </td>
+ </tr>
+
+
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">void
+insert_segment(const int_type& x1,<br>
+ const int_type& y1,<br>
+const int_type& x2,<br>
+ const int_type& y2)</span><br>
+ </td>
+ <td>Inserts a segment object
+with the specified coordinates into the Voronoi builder.
+ </td>
+ </tr>
+
+
+
+
+ <tr>
+ <td style="font-family: 'Courier New',Courier,monospace;">
+template <typename OUTPUT><br>
+void construct(OUTPUT *output)<br>
+ </td>
+ <td width="693">Runs sweepline
+algorithm over the set of the inserted geometries, outputs site and
+circle events to the OUTPUT data structure. It's responsibility of the
+output structure builder object to process them. For example both
+Voronoi diagram and Delaunay triangulation could be constructed from
+the Voronoi builder events, however internally they are different data
+structures, so it's up to them to process properly events produced by
+the builder object.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: 'Courier New',Courier,monospace;">
+void clear()<br>
+ </td>
+ <td width="693">Clears the
+list of the inserted geometries.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Voronoi Coordinate Type Traits</h1>
+
+
+ <p>The library provides the default coordinate type traits for the
+32-bit signed integer type:</p>
+
+ <font style="font-family: 'Courier New',Courier,monospace;" face="Courier New">
+ <p>template <typename T><br>
+struct voronoi_ctype_traits;<br>
+ <br>
+template <><br>
+struct voronoi_ctype_traits<int32> {<br>
+ typedef int32 int_type;<br>
+ typedef int64 int_x2_type;<br>
+ typedef uint64 uint_x2_type;<br>
+ typedef extended_int<128> big_int_type;<br>
+ typedef fpt64 fpt_type;<br>
+ typedef extended_exponent_fpt<fpt_type>
+efpt_type;<br>
+ typedef ulp_comparison<fpt_type> ulp_cmp_type;<br>
+ typedef type_converter_fpt to_fpt_converter_type;<br>
+ typedef type_converter_efpt to_efpt_converter_type;<br>
+};</p>
+ </font>
+ One
+of the most important features of the library is that Voronoi builder
+output geometries are constructed within defined relative error (64
+machine epsilons). That means the more mantissa bits the user provided
+fpt_type has the better precision of the output geometries will be. In
+order for the user defined traits to be consistent with the default
+Voronoi builder predicates user should define following set of
+coordinate types (the assumption is made that input geometries have
+X-bit signed integer coordinate type):<br>
+ <br>
+<table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: 'Courier New',Courier,monospace;">int_type<br>
+ </td>
+ <td style="vertical-align: top;">At least X-bit signed
+integer type. <br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace;">
+int_x2_type<br>
+ </td>
+ <td style="vertical-align: top;">At least 2X-bit signed
+integer type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace;">
+uint_x2_type<br>
+ </td>
+ <td style="vertical-align: top;">At least 2X-bit unsigned
+integer type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace;">
+big_int_type<br>
+ </td>
+ <td style="vertical-align: top;">At least 8X-bit signed
+integer type for voronoi of points.<br>
+At least 64X-bit signed integer type for voronoi of segments.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace;">
+fpt_type<br>
+ </td>
+ <td style="vertical-align: top;">IEEE-754 floating point
+type, with mantissa at least (X+16) bits and exponent able to handle
+32X-bit unsigned integer type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace;">
+efpt_type<br>
+ </td>
+ <td style="vertical-align: top;">IEEE-754 floating point
+type, with mantissa at least (X+16) bits and exponent able to handle
+64X-bit unsigned integer type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace;">
+ulp_cmp_type<br>
+ </td>
+ <td style="vertical-align: top;">Ulp comparison structure
+that checks if two fpt_type values are withing the given ulp range
+(relative error range).<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace;">
+to_fpt_converter_type<br>
+ </td>
+ <td style="vertical-align: top;">Type converter structure
+that converts any of the integer types above plus efpt_type to the
+fpt_type using operator().<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace;">
+to_efpt_converter_type<br>
+ </td>
+ <td style="vertical-align: top;">Type converter structure
+that converts any of the integer types above to the efpt_type using
+operator().<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <p>Notes:<br></p>
+ <ul>
+ <li>
+Four different integer types are used (instead of a single
+big_int_type) to slightly improve algorithm performance and memory
+usage.</li>
+ <li>As the maximum required size of the big_int_type is known in advance
+(based on the size of the integer type), library provided
+implementation of a fixed integer could be used (it is much faster than
+heap-allocated big integers).</li>
+ <li>
+Two separate floating-point types are defined because for the input
+with
+32-bit signed integer coordinates double won't be able to handle
+2048-bit (64 * 32) integers as they will overflow its exponent. On the
+gcc compiler it's possible to use 80-bit long doubles for both fpt
+types, however this is not supported by MSVC compiler.</li>
+ <li>efpt_type and to_efpt_converter_type are not used to construct Voronoi diagram of points (mocks will work fine).</li>
+ <li>
+For an example of the user defined coordinate type traits
+see advanced Voronoi tutorial.</li>
+ </ul>
+
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1"> </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_diagram.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_diagram.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,987 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+
+
+
+
+
+ <meta http-equiv="Content-Language" content="en-us">
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Diagram</title>
+
+
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="http://www.boost.org/"> </a></div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br>
+ </a></li>
+ <li>Voronoi Benchmark</li>
+ <li>Voronoi Builder<br>
+ </li>
+ <li>Voronoi Diagram</li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br>
+ </li>
+ <li>Voronoi Utils<br>
+ </li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
+
+ <h1>Voronoi Diagram</h1>
+A Voronoi
+diagram is the computational geometry concept that represents partition
+of the given space onto regions, with bounds determined by distances to a
+specified family of objects. The application area of this concept vary <a href="http://www.ics.uci.edu/%7Eeppstein/gina/scot.drysdale.html">from
+Archaeology to Zoology</a>. The Boost.Polygon library provides implementation of
+the Voronoi diagram data structure in 2D space. The internal representation
+consists of the three arrays, that respectively contain: Voronoi cells
+(represents the area around input site bounded by the Voronoi edges), Voronoi vertices
+(points where three or more Voronoi edges intersect), Voronoi edges
+(the one dimensional curves containing points equidistant from the two
+closest input sites). Each of the primitives (cell, vertex, edge)
+contains pointers to the other linked primitives, so that it's always
+possible to efficiently traverse Voronoi graph. The picture below shows
+the Voronoi vertices in red, Voronoi edges in black, input sites that
+correspond to the Voronoi cells in blue. It is considered that each
+input segment consists of the three sites: segment itself and its
+endpoints. As the result two additional
+Voronoi edges are constructed per each input segment. This is made to
+simplify the representation of the Voronoi diagram.<br>
+ <br>
+ <img style="border: 1px solid ; width: 300px; height: 300px;" alt="" src="images/voronoi2.png"><br>
+ <h2>Declaration<br>
+ </h2>
+
+
+
+ <span style="font-family: Courier New,Courier,monospace;">template
+<typename T, typename TRAITS = voronoi_diagram_traits<T> ></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">class
+voronoi_diagram;<br>
+ <br>
+</span><font face="Courier New"><span style="font-family: 'Courier New',Courier,monospace;">T</span></font>
+- specifies the coordinate type of the output geometries: input sites (points / segments), Voronoi vertices.<br>
+ <span style="font-family: Courier New,Courier,monospace;">TRAITS</span><font face="Courier New"><span style="font-family: 'Courier New',Courier,monospace;"></span></font>
+- Voronoi diagram traits (explained in the end of this chapter).<br>
+ <h2>Member Functions</h2>
+
+ <span style="font-family: Courier New,Courier,monospace;">
+
+ </span>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_diagram()<br>
+ </td>
+ <td>Default constructor.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+clear()<br>
+ </td>
+ <td>Clears diagram.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+cell_container_type &cells() const<br>
+ </td>
+ <td>Returns the const
+reference to the cell container.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+vertex_container_type &vertices() const<br>
+ </td>
+ <td>Returns the const
+reference to the vertex container.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+edge_container_type &edges() const<br>
+ </td>
+ <td>Returns the const
+reference to the edge container.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">unsigned
+int num_cells() const<br>
+ </td>
+ <td>Returns the number of the
+cells in the Voronoi diagram.<br>
+This value should be the same as the size of the cell container.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">unsigned
+int num_edges() const<br>
+ </td>
+ <td>Returns the number of the
+edges in the Voronoi diagram.<br>
+This value should be twice smaller than the size of the edge container.<br>
+The reason is that two half-edges are present for each Voronoi edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">unsigned
+int num_vertices() const<br>
+ </td>
+ <td>Returns the number of the
+vertices in the Voronoi diagram.<br>
+This value should be the same as the size of the vertex container.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <h2>Member Types</h2>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td>coordinate_type<br>
+ </td>
+ <td>Coordinate type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>point_type<br>
+ </td>
+ <td>2D point.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>cell_type<br>
+ </td>
+ <td>Voronoi cell.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>vertex_type<br>
+ </td>
+ <td>Voronoi vertex.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>edge_type<br>
+ </td>
+ <td>Voronoi edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>cell_container_type<br>
+ </td>
+ <td>Container of Voronoi cells.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>cell_iterator<br>
+ </td>
+ <td>Cell container iterator.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>const_cell_iterator<br>
+ </td>
+ <td>Const cell container iterator.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>vertex_container_type<br>
+ </td>
+ <td>Container of Voronoi vertices.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>vertex_iterator<br>
+ </td>
+ <td>Vertex container iterator.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>const_vertex_iterator<br>
+ </td>
+ <td>Const vertex container iterator.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>edge_container_type<br>
+ </td>
+ <td>Container of Voronoi edges.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>edge_iterator<br>
+ </td>
+ <td>Edge container iterator.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>const_edge_iterator<br>
+ </td>
+ <td>Const edge container iterator.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+
+ <h1>Voronoi Edge</h1>
+
+Voronoi edge is represented as a bit improved classical half-edge
+data structure.<br>
+ <h2>Declaration</h2>
+
+
+
+ <span style="font-family: Courier New,Courier,monospace;">template
+<typename T></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">class
+voronoi_edge;<br>
+ <br>
+T</span> - coordinate type. While Voronoi edge doesn't contain coordinates itself, it stores pointers to the Voronoi cell and vertex.<br>
+ <h2>Member Functions</h2>
+
+ <span style="font-family: Courier New,Courier,monospace;">
+
+ </span>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge()<br>
+ </td>
+ <td>Default constructor.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_cell_type
+*cell()<br>
+ </td>
+ <td>Returns the pointer to the
+Voronoi <span style="font-family: Courier New,Courier,monospace;"></span>cell
+that edge belongs to.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_cell_type *cell() const<br>
+ </td>
+ <td>Returns the const pointer
+to the Voronoi cell that edge belongs to.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+cell(voronoi_cell_type *c)<br>
+ </td>
+ <td>Sets the Voronoi cell
+pointer for the cell current edge belongs to.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_vertex_type
+*vertex0()<br>
+ </td>
+ <td>Returns the pointer to the
+start point of the edge.<br>
+If the edge is infinite in that direction returns NULL.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_vertex_type *vertex0() const<br>
+ </td>
+ <td>Returns the const pointer
+to the point vertex of the edge.<br>
+If the edge is infinite in that direction returns NULL.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+vertex0(voronoi_vertex_type *v)<br>
+ </td>
+ <td>Sets the start point
+pointer of the edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_vertex_type
+*vertex1()<br>
+ </td>
+ <td>Returns the pointer to the
+end point of the edge.<br>
+If the edge is infinite in that direction returns NULL.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_vertex_type *vertex1() const<br>
+ </td>
+ <td>Returns the const pointer
+to the end point of the edge.<br>
+If the edge is infinite in that direction returns NULL.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+vertex1(voronoi_vertex_type *v)<br>
+ </td>
+ <td>Sets the end point pointer
+of the edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type
+*twin()<br>
+ </td>
+ <td>Returns the pointer to the
+twin edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge_type *twin() const<br>
+ </td>
+ <td>Returns the const pointer
+to the twin edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+twin(voronoi_edge_type *e)<br>
+ </td>
+ <td>Sets the twin edge pointer
+of the edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type
+*next()<br>
+ </td>
+ <td>Returns the pointer to the
+CCW next edge within the corresponding Voronoi cell.<br>
+Edges not necessarily share a common vertex (e.g. infinite edges).<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge_type *next() const<br>
+ </td>
+ <td>Returns the const pointer
+to the CCW next edge within the corresponding Voronoi cell.<br>
+Edges not necessarily share a common vertex (e.g. infinite edges).<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+next(voronoi_edge_type *e)<br>
+ </td>
+ <td>Sets the CCW next edge
+pointer of the edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type
+*prev()<br>
+ </td>
+ <td>Returns the pointer to the
+CCW prev edge within the corresponding Voronoi cell.<br>
+Edges not necessarily share a common vertex (e.g. infinite edges).<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge_type *prev() const<br>
+ </td>
+ <td>Returns the const pointer
+to the CCW prev edge within the corresponding Voronoi cell.<br>
+Edges not necessarily share a common vertex (e.g. infinite edges).<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+prev(voronoi_edge_type *e)<br>
+ </td>
+ <td>Sets the CCW prev edge
+pointer of the edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+*data() const<br>
+ </td>
+ <td>Returns the pointer to the
+data associated with the edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+data(void *d) const<br>
+ </td>
+ <td>Sets the data pointer of
+the edge.<br>
+This allows the user to associate any data type with the edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type
+*rot_next()<br>
+ </td>
+ <td>Returns the pointer to the
+CCW next edge rotated around the edge start point.<br>
+If the edge is infinite in that direction returns NULL.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge_type *rot_next() const<br>
+ </td>
+ <td>Returns the const pointer
+to the CCW next edge rotated around the edge start point.<br>
+If the edge is infinite in that direction returns NULL.</td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type
+*rot_prev()<br>
+ </td>
+ <td>Returns the pointer to the
+CCW prev edge rotated around the edge start point.<br>
+If the edge is infinite in that direction returns NULL.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge_type *rot_prev() const<br>
+ </td>
+ <td>Returns the const pointer
+to the CCW prev edge rotated around the edge start point.<br>
+If the edge is infinite in that direction returns NULL.</td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+is_finite() const<br>
+ </td>
+ <td>Returns true if the both
+end points of the edge are finite, else false.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+is_linear() const<br>
+ </td>
+ <td>Returns true if the edge
+is linear (segment, ray, line), else false.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+is_curved() const<br>
+ </td>
+ <td>Returns true if the edge
+is curved (parabolic arc), else false.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+is_primary() const<br>
+ </td>
+ <td>Returns false if the edge
+goes through the endpoint of the segment site, else true.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <span style="font-family: Courier New,Courier,monospace;"><br>
+ </span>All
+the above methods have O(1) complexity. The size of
+the Voronoi edge structure is equal to: 6 * sizeof(void *). It is
+possible to disable the data member of the Voronoi edge data structure
+during the compile time using the following directive:<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">#define NO_VORONOI_EDGE_DATA</span><br>
+ <h2>Member Types</h2>
+
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td>coordinate_type<br>
+ </td>
+ <td>Coordinate type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>voronoi_cell_type<br>
+ </td>
+ <td>Voronoi cell type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>voronoi_vertex_type<br>
+ </td>
+ <td>Voronoi vertex type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>voronoi_edge_type<br>
+ </td>
+ <td>Voronoi edge type.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Voronoi Cell</h1>
+
+Voronoi cell is represented by a site the cell contains and a pointer
+to the incident edge.<br>
+ <h2>Declaration</h2>
+
+
+
+ <span style="font-family: Courier New,Courier,monospace;">template
+<typename T><br>
+class voronoi_cell;<br>
+ <br>
+</span><span style="font-family: Courier New,Courier,monospace;">T</span> - coordinate type.<br>
+ <h2>Member Functions</h2>
+
+ <span style="font-family: Courier New,Courier,monospace;">
+
+ </span>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_cell(const
+point_type &p1,<br>
+
+voronoi_edge_type *edge)<br>
+ </td>
+ <td>Constructs the Voronoi
+cell from the given point site and pointer to the one of the boundary
+edges.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_cell(const
+point_type &p1,<br>
+
+const point_type &p2,<br>
+
+voronoi_edge_type *edge)<br>
+ </td>
+ <td>Constructs the Voronoi
+cell from the given segment site and pointer to the one of the boundary
+edges.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+point_type &point0() const<br>
+ </td>
+ <td>If the cell contains point
+site returns it.<br>
+If the cell contains segment site returns its first endpoint.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+point_type &point1() const<br>
+ </td>
+ <td>If the cell contains point
+site returns it.<br>
+If the cell contains segment site returns its second endpoint.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type
+*incident_edge()<br>
+ </td>
+ <td>Returns the pointer to the
+one of the boundary edges.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge_type *incident_edge() const<br>
+ </td>
+ <td>Returns the const pointer
+to the one of the boundary edges.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+incident_edge(voronoi_edge_type *e)<br>
+ </td>
+ <td>Sets the incident boundary
+edge pointer of the cell.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+*data() const<br>
+ </td>
+ <td>Returns the pointer to the
+data associated with the cell.</td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+data(void *d) const<br>
+ </td>
+ <td>Sets the data pointer of
+the cell.<br>
+This allows the user to associate any data type with the cell.</td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+contains_point() const</td>
+ <td>Returns true if the cell
+contains a point site, else false.</td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+contains_segment() const</td>
+ <td>Returns true if the cell
+contains a segment site, else false.</td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+is_degenerate() const </td>
+ <td>Returns true if the cell
+doesn't have an incident edge.<br>
+Could happen if a few input segments share a common endpoint.</td>
+ </tr>
+ </tbody>
+ </table>
+ <span style="font-family: Courier New,Courier,monospace;"><br>
+ </span>All the above methods have O(1) complexity. The size of
+the Voronoi cell structure is equal to: 2 * sizeof(void *) + 4 *
+sizeof(coordinate_type). It is possible to disable the data member of the Voronoi cell data
+structure during the compile time using the following directive:<br>
+
+ <br>
+
+ <span style="font-family: Courier New,Courier,monospace;">#define NO_VORONOI_CELL_DATA</span>
+ <h2>Member Types</h2>
+
+
+
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td>coordinate_type<br>
+ </td>
+ <td>Coordinate type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>point_type</td>
+ <td>Point type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>voronoi_edge_type<br>
+ </td>
+ <td>Voronoi edge type.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>Miscellaneous</h2>
+
+The following code snippet effectively traverses the Voronoi edges around the
+Voronoi cell:<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge<double> *edge = cell->incident_edge();</span><br>
+ <span style="font-family: Courier New,Courier,monospace;">do {</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">
+edge = edge->next();</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">
+// Do smth. with edge.</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">} while
+(edge != cell->incident_edge());</span><br>
+ <h1>Voronoi Vertex</h1>
+Voronoi vertex is represented by a point that corresponds to the vertex
+and a pointer to the incident edge.<br>
+ <h2>Declaration</h2>
+
+
+
+ <span style="font-family: Courier New,Courier,monospace;">template
+<typename T></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">class
+voronoi_vertex;<br>
+ <br>
+</span><span style="font-family: Courier New,Courier,monospace;">T</span> - coordinate type.<br>
+ <h2>Member Functions</h2>
+
+ <span style="font-family: Courier New,Courier,monospace;">
+
+ </span>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_vertex(const
+point_type &vertex,<br>
+ voronoi_edge_type *edge)<br>
+ </td>
+ <td>Constructs the Voronoi
+vertex that corresponds to the give point and incident edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+point_type &vertex() const<br>
+ </td>
+ <td>Returns the point that
+represents vertex.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type
+*incident_edge()<br>
+ </td>
+ <td>Returns the incident edge
+pointer.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge_type *incident_edge() const<br>
+ </td>
+ <td>Returns the const pointer
+to the incident edge.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+incident_edge(voronoi_edge_type *e)<br>
+ </td>
+ <td>Sets the incident edge
+pointer.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+*data() const<br>
+ </td>
+ <td>Returns the pointer to the
+data associated with the vertex.</td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+data(void *d) const<br>
+ </td>
+ <td>Sets the data pointer of
+the cell.<br>
+This allows the user to associate any data type with the vertex.</td>
+ </tr>
+ </tbody>
+ </table>
+ <span style="font-family: Courier New,Courier,monospace;"><br>
+ </span>All the above methods have O(1) complexity. The size of
+the Voronoi vertex structure is equal to: 2 * sizeof(void *) + 2 *
+sizeof(coordinate_type). It is possible to disable the data member of the Voronoi vertex data
+structure during the compile time using the following directive:<br>
+
+ <br>
+
+ <span style="font-family: Courier New,Courier,monospace;">#define NO_VORONOI_VERTEX_DATA</span>
+ <h2>Member Types</h2>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td>coordinate_type<br>
+ </td>
+ <td>Coordainte type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>point_type<br>
+ </td>
+ <td>Point type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>voronoi_edge_type<br>
+ </td>
+ <td>Voronoi edge type.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <h2>Miscellaneous</h2>The following code snippet effectively traverses the Voronoi edges around the
+Voronoi vertex:<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">const
+voronoi_edge<double> *edge = vertex->incident_edge();</span><br>
+ <span style="font-family: Courier New,Courier,monospace;">do {</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">
+edge = edge->next();</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">
+// Do smth. with edge.</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">} while
+(edge != vertex->incident_edge());<br>
+</span>
+ <h1>Voronoi Diagram Traits<br>
+ </h1>
+Voronoi diagram traits are used to configure Voronoi diagram data
+structure.<br>
+ <h2>Declaration</h2>
+
+
+
+ <span style="font-family: Courier New,Courier,monospace;">template
+<typename T></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">struct
+voronoi_diagram_traits;<br>
+ <br>
+</span><span style="font-family: Courier New,Courier,monospace;">T</span> - coordinate type.<br>
+ <h2>Member Types</h2>
+
+ <span style="font-family: Courier New,Courier,monospace;">
+
+ </span>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">coordinate_type<br>
+ </td>
+ <td>The main coordinate type
+of the Voronoi diagram primitives.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">ctype_converter_type<br>
+ </td>
+ <td>Coordinate type converter
+structure.<br>
+Converts coordinates provided by the Voronoi builder to the
+internal coordinate type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">point_type<br>
+ </td>
+ <td>2D point data structure.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">cell_type<br>
+ </td>
+ <td>Voronoi cell type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">vertex_type<br>
+ </td>
+ <td>Voronoi vertex_type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">edge_type<br>
+ </td>
+ <td>Voronoi edge_type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">vertex_equality_predicate_type<br>
+ </td>
+ <td>Predicate that returns
+true if two points are considered to be equal.<br>
+This is used to unite nearby Voronoi vertices.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1"> </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_main.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_main.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,419 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <meta http-equiv="Content-Language" content="en-us">
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Main</title>
+
+
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="http://www.boost.org/"> </a></div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li>Voronoi Main Page<br>
+ </li>
+ <li>Voronoi Benchmark</li>
+ <li>Voronoi Builder<br>
+ </li>
+ <li>Voronoi Diagram</li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br>
+ </li>
+ <li>Voronoi Utils<br>
+ </li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
+
+ <h1>THE BOOST.POLYGON VORONOI LIBRARY<br>
+ </h1>
+ <img style="width: 900px; height: 300px;" alt="" src="images/voronoi3.png"><br>
+The Boost.Polygon Voronoi library provides functionality to construct the Voronoi diagram
+of a set of points and linear segments in 2D space with the following
+set of
+limitations:<br>
+ <ul>
+ <li>coordinates of the input points and endpoints of the
+segments
+should be of the integer type;</li>
+ <li>input segments should not overlap
+except their endpoints.</li>
+ </ul>
+While the first restriction is permanent (it
+allows to give the exact warranties about the output precision and
+algorithm execution),
+the second one may be resolved using the Boost.Polygon functionality.
+The strong sides of the
+library and main benefits comparing to the other implementations are
+discussed in the following paragraphs.<span style="font-weight: bold;"></span><br>
+ <h2>Robustness and Efficiency</h2>
+Lets explain a bit those terms. The efficiency is simply measured by
+the time it takes the algorithm to execute. The robustness is a bit
+more harder to explain. But those of you who had the experience with
+the following situations would understand what it doesn't mean: application segfaults randomly, algorithm output contains
+degeneracies or is completely invalid (e.g. a point is considered to be outside of the polygon,
+while should be inside). In other words robust implementation doesn't
+fail and produces expected output in 100% of cases, thus user can rely
+on
+it. Robustness is a weak place of the most non-commercial
+implementations of any complex geometric algorithm. The main issues of
+that could be divided onto two main categories: memory management
+issues, numeric stability issues. Our implementation avoids the
+first type of issues using pure STL data structures, thus you won't find
+any operator new in the code. The second category of problems is
+resolved using multiprecision <a href="voronoi_predicates.htm">geometric
+predicates</a>.
+Even for commercial implementations usage of such predicates usually
+results in a huge performance slowdown. Here is another strong side of
+the Boost.Polygon
+Voronoi library: we avoid multiprecision computations in 95% of cases
+using
+extremely fast floating-point predicates. Yes, those are not always
+exact, but we developed the <a href="voronoi_robust_fpt.htm">relative
+error arithmetic apparatus</a> to identify them and switch to the
+higher precision predicates when required.<br>
+ <h2>Precision of the Output Structures<br>
+ </h2>
+One of the extremely important results of using two types of predicates
+is that library efficiently computes relatively precise coordinates of
+the output geometries. Here we will explain a bit what exactly
+"relatively precise" means and how the received output may differ from
+the theoretically correct one (here and after we assume that output
+coordinate type is the IEEE-754 floating-point type).<br>
+ <br>
+Voronoi implementation guaranties that the relative error of the
+coordinates of the output
+geometries is always not higher than 64 machine epsilons (6
+bits of mantissa), while in many cases it is slightly less. That also
+means that using floating-point type with the larger mantissa will
+produce more precise output. Let's consider
+the following example: the output Voronoi
+vertex has double (53-bit mantissa) x-coordinate equal to 1.0, then the
+absolute error is at most 2^-53 * 2^6 = 2^-47 and the exact value of
+x-coordinate lies in the range [1.0 - 2^-47, 1.0 + 2^-47]. For
+x-coordinate equal to 2^31, the absolute error will be at most 2^-53 *
+2^31 * 2^6 = 2^-16 and the exact value of x-coordinate lies in the
+range
+[2^31 - 2^-16, 2^31 + 2^16]. For the output Voronoi vertex with long
+double
+(64-bit mantissa) x-coordinate equal to 2^31, the absolute error will
+be at most 2^-64 * 2 ^31 * 2^6 = 2^-27 and the exact value of
+x-coordinate
+lies in the range [2^31-2^-27, 2^31+2^-27]. If you'd like to become
+master of the absolute and relative error try this article.<br>
+ <br>
+During the finalization step the implementation unites Voronoi vertices whose both
+coordinates are situated within the relative error range equal to 128
+machine epsilons and removes any Voronoi edges between them. That is
+the only case that might cause differences between the algorithm output
+topology and theoretically precise one. Now let's see what is the practical
+impact of this. Consider the following example: we are going to construct the
+Voronoi diagram of our Solar System. The radius of our Solar System is
+approximately 2^42 metres, and we are going to snap it to the integer
+grid of [-2^42; 2^42] x [-2^42; 2^42]. Let's choose the long double
+(64 bit mantissa) output coordinate type, then the maximum absolute error
+for the output geometries within our Solar System will be on its boundaries
+and equal to 2^-64 * 2^42 * 2^6 = 2^-18 metres. In the output we are going to
+consider vertices with both coordinates that are within 2^-17 metres (8
+micrometres) distance to be equal. Come on, that distance is equal to
+the size of a bacteria. Can you even see those?<br>
+ <h2>Fully Functional with Segments</h2>
+There are not many implementations of the Voronoi diagram construction
+algorithm that could
+handle linear segment inputs, even considering the commercial libraries.
+Support of the
+segments allows to discretize any input geometry (circle, ellipse,
+parabola). Of course as the result those might have floating-point
+coordinates, but that is resolved using scaling and snapping to the
+integer grid. This functionality is very handy as allows to compute
+the medial axis transform of the arbitrary set of input geometries. So
+one may start
+using it for the next generation pattern recognition or computer vision
+project.<br>
+ <h2>Basic and Advanced Usage Cases</h2>
+The main library header <span style="font-family: Courier New,Courier,monospace;">voronoi.hpp</span>
+defines the following static functions to integrate the Voronoi library functionality with the Boost.Polygon interfaces:<br>
+ <br>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename Point, typename VB><br>
+void insert(const Point &point, VB *vb)<br>
+ </td>
+ <td>Inserts a point into the Voronoi builder data structure.<br>
+Point type should model the point concept.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename PointIterator, typename VB><br>
+void insert(PointIterator first, <br>
+ PointIterator last,<br>
+ VB *vb)<br>
+ </td>
+ <td>Inserts an iterator range of points into the Voronoi builder data structure.<br>
+Corresponding point type should model the point concept.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename Segment, typename VB><br>
+void insert(const Segment &segment, VB *vb)<br>
+ </td>
+ <td>Inserts a segment into the Voronoi builder data structure.<br>
+Segment type should model the segment concept.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename SegmentIterator, typename VB><br>
+void insert(SegmentIterator first,<br>
+ SegmentIterator last,<br>
+ VB *vb)<br>
+ </td>
+ <td>Inserts an iterator range of segments into the Voronoi builder data structure.<br>
+Corresponding segment type should model the segment concept.<br>
+ </td>
+ </tr>
+<tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename PointIterator, typename VD><br>
+void construct_voronoi(PointIterator first,<br>
+
+PointIterator last,<br>
+
+VD *vd)<br>
+ </td>
+ <td>Constructs Voronoi diagram of a set of points.<br>Corresponding point type should model the point concept.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename SegmentIterator, typename VD><br>
+void construct_voronoi(SegmentIterator first,<br>
+
+SegmentIterator last,<br>
+
+VD *vd)<br>
+ </td>
+ <td>Constructs Voronoi diagram of a set of segments.<br>Corresponding segment type should model the segment concept.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template <typename PointIterator,<br>
+ typename SegmentIterator,<br>
+ typename VD><br>void construct_voronoi(PointIterator p_first,<br>
+
+PointIterator p_last,<br>
+SegmentIterator s_first,<br>
+
+SegmentIterator s_last,<br>
+VD *vd)<br>
+ </td>
+ <td>Constructs Voronoi
+diagram of a set of points and segments.<br>Corresponding point type should model the point concept.<br>
+Corresponding segment type should model the segment concept.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <br>This
+means that it's possible to construct the Voronoi diagram with the
+following two lines of code (if corresponding input types satisfy the Boost.Polygon concept model):<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">voronoi_diagram<double>
+vd;</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">construct_voronoi(points.begin(), points.end(), &vd);</span><br>
+ <br>
+Isn't that simple? The library also provides the clear interfaces to
+ associate user data with the output geometries, efficiently traverse Voronoi graph and utilities to
+ visualize output primitives (e.g.
+discretization of the parabolic edges, clipping of the linear edges).
+More details on those are covered in the basic Voronoi tutorial. Advanced usage of the library with the configuration of the coordinate
+types is explained in the <a href="voronoi_advanced_tutorial.htm">advanced
+Voronoi tutorial</a>.
+The library also allows users to implement their own Voronoi diagram /
+Delaunay triangulation construction routines based on the Voronoi builder API.<br>
+ <h2>No Third Party Dependencies<br>
+ </h2>Yes,
+the library doesn't depend on any 3rd party code. Even more than that
+there is only one dependency on the Boost libraries: boost/cstdint.hpp.
+All the required multiprecision types functionality is implemented as
+part of the library and is not exposed to the user. Considering the
+fact that Voronoi implementation consists of just 7 headers (3 public
+and 4 private) it is easy to compile it within a minute after download.
+On the other hand voronoi.hpp header provides integration routines with
+the Boost.Polygon concepts and models with a drawback of additional
+dependencies. <h2>Extensible for the User Provided Coordinate Types</h2>
+Our implementation is coordinate type agnostic. That means that as soon
+as user provides types satisfy the set of restrictions of the Voronoi builder coordinate type traits
+and implement methods required by the library no changes are required
+neither
+from the algorithm, nor from the implementation of the predicates. So it's
+possible to
+construct Voronoi diagram for the 256-bit integer input coordinate type
+and
+512-bit output floating-point type without making any changes to the
+internal code.<br>
+ <h2>Bright Future<br>
+ </h2>
+Below one may find the list of the main directions for the future
+development of the library.<br>
+High-priority tasks that already have approximate implementation plan
+are following (some of those may be proposed as future GSoC projects):<br>
+ <ul>
+ <li>Implementing Delaunay triangulation data structure.<br>
+Note: only data structure needs to be implemented that properly
+processes events provided by the Voronoi builder.</li>
+ <li>Implementing medial axis transform data structure.<br>
+Note: in general case the Voronoi diagram has completely the same
+geometry
+as the medial axis (they are 100% equal), however for many applications
+user is not interested in the Voronoi edges inside the hole regions.
+The main point
+of this data structure is to automatically filter Voronoi edges that
+belong to those areas.</li>
+ <li>Voronoi
+diagram data structure could be used to find K nearest neighbors of N
+sites in O(N*K*log(K) + N*log(N)) time. The return value would be a
+list of the k nearest neighbors for each site.<br>
+</li>
+ <li>Using the r-tree data structure built on top of the
+bounding rectangles around the Voronoi cells to answer the nearest
+neighbor queries in log(N) time, where N is the number of the Voronoi cells.<br>
+Note: there should be r-tree data structure available soon as part of
+the Boost libraries.</li>
+
+ <li>Providing interface to retrieve the convex hull of a set of
+points and segments from the Voronoi builder once the Voronoi diagram is
+constructed in O(N) time.</li>
+ <li>Providing serialization utilities for the Voronoi diagram data structure.<br>
+ </li>
+
+
+ </ul>
+High-priority tasks to be considered:<br>
+ <ul>
+ <li>Dropping the restriction on the non-intersecting input
+geometries.</li>
+ <li>Integration of the Voronoi diagram data structure with the BGL (Boost
+Graph Library).</li>
+ <li>Support of the other types of distance metrics.</li>
+ <li>Construction of the constrained Delaunay triangulation.</li>
+ <li>Support of the circular input geometries.</li>
+ </ul>
+Based on the community suggestions priorities may be changed.<br>
+ <h2>Theoretical Research<br>
+ </h2>Voronoi
+was developed as part of the Google Summer of Code 2010. The
+library was actively maintained for the last two years and involved
+strong mathematical research in the field of algorithms, data
+structures,
+relative error arithmetic and numerical robustness. Nowadays one can
+often read a scientific article that contains non-practical theoretical
+results or implementation with
+benchmarks nobody else can reproduce. The opposite story is with
+the Boost.Polygon Voronoi library. We provide pure implementation and
+benchmarks one may run on
+his PC. In case community finds it useful we will incrementally
+add more documentation on the theoretical side of our realization. The
+authors would like to acknowledge the Steven Fortune's article <span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-weight: bold;"></span></span>"<a href="http://dl.acm.org/citation.cfm?id=10549">A Sweepline algorithm
+for Voronoi diagrams</a>", that contains the fundamental ideas of the
+current implementation.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1"> </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_predicates.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_predicates.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,250 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+
+
+
+ <meta http-equiv="Content-Language" content="en-us">
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Predicates</title>
+
+
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="http://www.boost.org/"> </a></div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br>
+ </a></li>
+ <li>Voronoi Benchmark</li>
+ <li>Voronoi Builder<br>
+ </li>
+ <li>Voronoi Diagram</li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br>
+ </li>
+ <li>Voronoi Utils<br>
+ </li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
+
+
+ <h1>Voronoi Predicates<br>
+ </h1>
+
+In mathematical theory predicate is an operator which returns true
+or false (e.g. it may answer a question: "is it sunny today?").<br>
+
+Voronoi predicates contain implementation of a set of the geometric
+predicates used by the Voronoi builder.
+Except of those it also provides
+functors that allow to compute coordinates of the centers of the
+inscribed
+circles (those correspond to the Voronoi vertices) within the given
+relative error precision range (64 machine epsilons). This means that
+the more mantissa bits
+your floating point type has the better precision of the output
+geometries you'll get. This
+is a very handy functionality as it allows to improve output precision
+simply providing 3rd party IEEE-754 like floating-point types.<br>
+
+
+ <h2>Geometric Predicates</h2>
+
+The main issues with the implementation of any complex geometric
+algorithm arise when dealing with the robustness of the geometric
+predicates.
+Usually this
+is also the point where the commercial projects stand strong against
+noncommercial implementations (it's not the case with our
+implementation).
+For the short example let's consider the following code snippet, that
+could
+be used to compute orientation of the three points:<br>
+
+ <br>
+
+ <span style="font-family: Courier New,Courier,monospace;">double
+cross_product(double dx1, double dy1, double dx2, double dy2) {</span><br style="font-family: Courier New,Courier,monospace;">
+
+ <span style="font-family: Courier New,Courier,monospace;">
+return dx1 * dy2 - dx2 * dy1;</span><br style="font-family: Courier New,Courier,monospace;">
+
+ <span style="font-family: Courier New,Courier,monospace;">}<br>
+ <br>
+int main() {<br>
+ int v = 1 << 30; // 2 ^ 30<br>
+ double result = </span><span style="font-family: Courier New,Courier,monospace;">cross_product</span><span style="font-family: Courier New,Courier,monospace;">(v, v - 1, v + 1,
+v);<br>
+ printf("%.3f", result);<br>
+ return 0;<br>
+}<br>
+ <br>
+ </span>The
+output of this simple program will be "0.000", while
+the correct one is "1.000". In terms of the orientation test this means
+that points are collinear instead of being CCW oriented. This is one of
+the basic predicates used in any geometric algorithm and taking wrong
+output from it may influence the further algorithm execution:
+corrupting algorithm underlying structures or producing completely
+invalid output. Voronoi uses
+slightly more complex predicates. To insure that they are robust and
+efficient the approach that combines two known techniques (lazy
+arithmetic and multiple
+precision computations) is used.<br>
+
+
+ <h2>Lazy Arithmetic</h2>
+
+Lazy
+arithmetic is based on the usage of IEEE-754 floating-point types to
+quickly evaluate the result of the expression. While this approach has
+a good speed
+performance it doesn't produce reliable results all the time (as in the
+example above). The way to solve the issue is apart from computing
+result of the expression compute the relative error of it also. This
+will
+give us the range of values the evaluated result belongs to and based
+on that we can
+come up with two decisions: 1) output the value; 2) recompute the
+expression using multiprecision type. The way relative errors are
+evaluated is explained in the <a href="voronoi_robust_fpt.htm">Voronoi
+Robust FPT</a> section.<br>
+
+
+ <h2>Multiple Precision Arithmetic</h2>
+
+In the vast majority of cases
+the lazy arithmetic approach produces correct result thus further
+processing is not required. In other cases the Voronoi library defined
+or user
+provided multiple precision types are used to produce correct result.
+However even that doesn't solve all the cases. Multiprecision geometric
+predicates could be divided onto two categories:<br>
+
+ <br>
+
+1) mathematical transformation of the predicate exists that evaluates
+exact result:<span style="font-family: Courier New,Courier,monospace;"><br>
+ <br>
+Predicate: A/B + C/D ?< 0;<br>
+After math. transform: (A*D + B*C) / (B * D) ?< 0;<br>
+ <br>
+Predicate: sqrt(A) ?< 1.2;<br>
+After math. transform: A ?< 1.44;<br>
+ <br>
+ </span>2) the correct result could be produced only by increasing
+precision of the multiprecision type and with defined relative error
+for the output type:<br>
+
+ <br>
+
+ <span style="font-family: Courier New,Courier,monospace;">Predicate:
+sqrt(A) + sqrt(B) + sqrt(C) + sqrt(D) + sqrt(E) ?< 1.2;<br>
+Imagine that value of the expression to the left is very close to 1.2;<br>
+ </span><br>
+
+ <span style="font-family: Courier New,Courier,monospace;">Predicate:
+sin(x) ?< 0.57;<br>
+Relative error of sin function should be known;<br>
+ <br>
+ </span>The Voronoi of points could be completely
+implemented using predicates of the first type, however the Voronoi of
+segments could not.
+The predicate that doesn't fall into the first category is responsible
+for comparison of the Voronoi circle events. However it appears that
+properly used
+this predicate can't corrupt algorithm internal structures and produces
+output technically the same as produced in case this predicate fell in
+the first category. The main reasons for this are: 1) algorithm
+operates with integer coordinate type of the input geometries; 2)
+closely
+situated Voronoi vertices are considered to be the same in the output
+data structure (this won't influence main targets algorithm is used
+for).<span style="font-family: Courier New,Courier,monospace;"></span><span style="font-family: Courier New,Courier,monospace;"></span><br>
+</td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top"> </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_robust_fpt.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_robust_fpt.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+
+
+ <meta http-equiv="Content-Language" content="en-us">
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Robust FPT</title></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="http://www.boost.org/"> </a></div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br>
+ </a></li>
+ <li>Voronoi Benchmark</li>
+ <li>Voronoi Builder<br>
+ </li>
+ <li>Voronoi Diagram</li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br>
+ </li>
+ <li>Voronoi Utils<br>
+ </li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
+
+ <h1>Voronoi Robust FPT</h1>
+The Voronoi
+robust floating-point types are the set of classes and tools that
+allow to estimate relative error of the arithmetic expressions. It is
+assumed that the other Boost libraries may find this unit functionality
+extremely useful, as it can be used to implement robust and efficient
+arithmetic predicates or functors that compute values within known
+relative error.<br>
+ <h2>Robust Fpt Type</h2>
+The robust
+fpt type (robust floating-point type)
+- represents the IEEE-754 floating-point type wrapper that also
+contains
+information about the relative error of the underlying value. The
+implementation overloads 5 standard operations: +, -, *, /, sqrt and
+apart from the evaluating value of the expression also computes its
+relative
+error. Let's consider two values A and B; C - rounding error, re(X)
+- relative error of the X expression, then following rules apply:<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">re(A+B)
+<= max(re(A), re(B)) + C, if A * B >= 0;</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">re(A-B)
+<= (B * re(A) + A * re(B)) / |A - B| + C, if A * B < 0;</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">re(A*B)
+<= re(A) + re(B) + C;</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">re(A/B)
+<= re(A) + re(B) + C;</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">re(sqrt(A))
+<= re(A) * 0.5 + C;<br>
+ <br>
+ </span>The constant C is equal to the rounding error,
+which for the above set of arithmetic operations in the IEEE-754
+floating-point implementation should be equal to 1 machine epsilon. <br>
+ <h2>Robust Difference Type</h2>
+The robust
+difference type -
+represents expression wrapper that holds the positive and negative
+partial
+sums of the expression in a separate values in order to avoid
+the cancellation errors before evaluating the final difference.
+Following
+arithmetic operators are overloaded for the robust difference type: +,
+-, *, / (division operator is not overloaded for the case were both
+arguments have robust difference type).<br>
+Looking at the relative error formulas above one may notice a few facts:<br>
+1) all of the formulas evaluate upper bound of the relative error, the
+actual value could be a lot smaller;<br>
+2) relative error estimate for the expression depends on the order
+operations are evaluated;<br>
+3) relative error of the difference of two positive numbers may
+be
+extremely large in case their values are close to each other (this is
+also known as the cancellation error).<br>
+To explain this a bit consider the following expression (~ - stands for
+almost equal, << - many times larger than):<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">A - B +
+C, where A ~ B and C << B;</span><br>
+ <br>
+Computing the relative error of this expression from left to right will
+produce extremely large relative error:<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">re(A-B+C)
+= max(re(A-B), re(C)) = re(A-B) = (B * re(A) + A * re(B)) / 0 = INF;<br>
+ <br>
+ </span>While doing this from right to left will keep the relative
+error value small:<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">re(A-B+C)
+= re(C-B+A) = max(re(C-B), re(A)) = max(re(A), re(B));<br>
+ <br>
+ </span>While both estimates are valid (they define upper bound of
+the relative error), of course the second one is preferable.<br>
+Here is the place where robust difference type comes useful. Basically
+it splits expression onto positive and negative partial sums and
+evaluates the
+difference only when the result is required. And did I mention that
+positive and negative values might be of the robust fpt type, that's
+why
+the relative error is always known for the expression result.<br>
+ <h2>Robust Sqrt Expression Structure</h2>
+The robust square root expression structure allows to compute the
+result of
+the expression that contains square roots within defined relative
+error.
+As an example consider the following expression:<br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">A *
+sqrt(a) - B * sqrt(b), A * B > 0, a >= 0, b >= 0;</span><br>
+ <br>
+Computing this expressions directly may apply huge cancellation error,
+however it may be transformed to the next equivalent expression:<br>
+ <span style="font-family: Courier New,Courier,monospace;"><br>
+(A * A * a - B * B * b) / (A * sqrt(a) + B * sqrt(b));</span><br>
+ <br>
+The numerator and denominator of this expression could be computed
+directly as those won't lead to the cancellation errors.<br>
+ <br>
+In general case the robust sqrt expression structure allows to evaluate
+the following set of expressions:<br>
+ <span style="font-family: Courier New,Courier,monospace;"><br>
+sum(A[i] * sqrt(a[i]), i = 1 .. N), N <= 4;</span><br>
+ <br>
+This appears to be enough for the Boost.Polygon Voronoi.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top"> </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file
Added: trunk/libs/polygon/doc/voronoi_utils.htm
==============================================================================
--- (empty file)
+++ trunk/libs/polygon/doc/voronoi_utils.htm 2012-05-10 17:45:11 EDT (Thu, 10 May 2012)
@@ -0,0 +1,380 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
+
+
+
+
+
+
+ <meta http-equiv="Content-Language" content="en-us">
+
+
+ <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Utils</title>
+
+
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
+
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1">
+ <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="http://www.boost.org/"> </a></div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
+ <li>Segment Concept</li>
+
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br>
+ </a></li>
+ <li>Voronoi Benchmark</li>
+ <li>Voronoi Builder<br>
+ </li>
+ <li>Voronoi Diagram</li>
+ <li>Voronoi Predicates</li>
+ <li>Voronoi Robust FPT<br>
+ </li>
+ <li>Voronoi Utils<br>
+ </li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
+
+ <h1>Voronoi Utils</h1>
+Voronoi
+utilities implements a set of tools that users may find useful
+especially for
+the visualization of the Voronoi diagrams or discretization of the
+parabolic
+edges. <br>
+ <h2>Important<br>
+ </h2>
+
+There are no warranties about precision of the
+output structures produced by the utilities class. This is mostly
+because input
+coordinate type the utilities operate with
+is supposed to be double. Any degeneracies may be reported, however those are of low
+priority to be fixed. <br>
+ <h2>Declaration</h2>
+
+
+ <span style="font-family: Courier New,Courier,monospace;">template
+<typename T, typename TRAITS = voronoi_utils_traits<T> ></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">class
+voronoi_utils;<br>
+ <br>
+ </span><span style="font-family: Courier New,Courier,monospace;">T
+- </span>output coordinate type used by the utilities.<br>
+ <span style="font-family: Courier New,Courier,monospace;">TRAITS
+- </span>output geometries type traits (see definition below).<br>
+ <h2 style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Member
+Functions</h2>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template
+<typename CT></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">static
+brect_type scale_bounding_rectangle(<br>
+ const bounding_rectangle<CT> &brect,<br> fpt_type factor = 1.0)</span><br>
+ </td>
+ <td>Returns the scaled
+bounding rectangle.<br>
+The center of the transformation corresponds to the center of the input
+rectangle.<br>
+ </td>
+ </tr>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template
+<typename CT><br>
+static void discretize_finite_edge(<br>
+ const voronoi_edge<CT> &edge,<br> coordinate_type max_error,<br> point_set_type &discretization)</span><span style="font-family: Courier New,Courier,monospace;"></span><span style="font-family: Courier New,Courier,monospace;"></span><br>
+ </td>
+ <td>Provides the point
+discretization of the input voronoi edge.<br>
+If the edge is infinite (ray, line) returns empty output set.<br>
+Max error specifies the maximum distance between approximation and original parabolic arc.<br>
+ </td>
+ </tr>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template
+<typename CT><br>
+static void clip_linear_edge(<br>
+ const voronoi_edge<CT> &edge,<br> const brect_type &brect,<br> point_set_type &clipped_edge)</span><br>
+ </td>
+ <td>Clips the input Voronoi
+edges with the specified rectangle.<br>
+If the edge is a parabolic arc returns empty output set.<br>
+ </td>
+ </tr>
+ <tr>
+ <td><span style="font-family: Courier New,Courier,monospace;">template
+<typename PointType></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">static
+void clip_linear_edge(<br>
+ const PointType &p1,<br> const PointType &p2,<br> const brect_type &brect,<br> point_set_type &clipped_edge)</span><br>
+ </td>
+ <td>Clips the input linear
+edge with the specified rectangle.<br>
+The edge is defined by its endpoints.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <h2 style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Member Types</h2>
+
+
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td>coordinate_type</td>
+ <td>Coordinate type.</td>
+ </tr>
+ <tr>
+ <td>point_type</td>
+ <td>2D Point</td>
+ </tr>
+ <tr>
+ <td>point_set_type</td>
+ <td>2D Point set.</td>
+ </tr>
+ <tr>
+ <td>brect_type</td>
+ <td>Bounding rectangle.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Bounding Rectangle</h1>
+
+The module provides implementation of a simple bounding rectangle data structure.<br>
+ <h2>Declaration</h2>
+
+
+
+ <span style="font-family: Courier New,Courier,monospace;">template
+<typename T></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">class
+bounding_rectangle;<br>
+ <br>
+T - </span>coordinate type the rectangle operates with.<br>
+ <h2 style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Member
+Functions</h2>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bounding_rectangle()<br>
+ </td>
+ <td>Default constructor.
+Initializes the empty bounding rectangle.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bounding_rectangle(<br>
+ coordinate_type x1,<br>
+ coordinate_type y1,<br>
+ coordinate_type x2,<br>
+ coordinate_type y2)<br>
+ </td>
+ <td>Constructs the bounding
+rectangle with the given coordinates.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+update(<br>
+ coordinate_type x,<br>
+ coordinate_type y)<br>
+ </td>
+ <td>Extends the bounding
+rectangle with the specified point defined by its coordinates.<br>
+If the rectangle is not initialized, initializes it with the specifed
+point.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+is_empty() const<br>
+ </td>
+ <td>Returns true if the
+rectangle is empty (uninitialized), else false.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">void
+clear()<br>
+ </td>
+ <td>Sets rectangle to an empty
+state.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">bool
+contains(<br>
+ coordinate_type x,<br>
+ coordinate_type y) const<br>
+ </td>
+ <td>Returns true if the
+rectangle contains the given point defined by its coordinates, else
+false.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">coordinate_type
+x_min() const<br>
+ </td>
+ <td>Returns the x coordinate
+of the bottom left corner of the rectangle.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">coordinate_type
+y_min() const<br>
+ </td>
+ <td>Returns the y coordinate
+of the bottom left corner of the rectangle.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">coordinate_type
+x_max() const<br>
+ </td>
+ <td>Returns the x coordinate
+of the top right corner of the rectangle.<br>
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">coordinate_type
+y_max() const<br>
+ </td>
+ <td>Returns the y coordinate
+of the top right corner of the rectangle.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <h1>Voronoi Utils Traits</h1>
+Voronoi utils traits supply Voronoi utilities with appropriate input/output types and type converter structure.<br>
+ <h2>Declaration</h2>
+
+
+
+ <span style="font-family: Courier New,Courier,monospace;">template
+<typename fpt></span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">struct
+voronoi_utils_traits;</span><br style="font-family: Courier New,Courier,monospace;">
+
+
+ <h2 style="color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Member Types<br>
+ </h2>
+ <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td>coordinate_type<br>
+ </td>
+ <td>Coordinate type.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>point_type<br>
+ </td>
+ <td>2D Point .<br>
+ </td>
+ </tr>
+ <tr>
+ <td>point_set_type<br>
+ </td>
+ <td>2D Point set.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>brect_type<br>
+ </td>
+ <td>Bounding rectangle.<br>
+ </td>
+ </tr>
+ <tr>
+ <td>ctype_converter_type<br>
+ </td>
+ <td>Coordinate type converter structure.<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" valign="top" nowrap="1"> </td>
+ <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+</body></html>
\ No newline at end of file
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk