Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r77856 - in sandbox/gtl: doc libs/polygon/example
From: sydorchuk.andriy_at_[hidden]
Date: 2012-04-09 14:47:21


Author: asydorchuk
Date: 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
New Revision: 77856
URL: http://svn.boost.org/trac/boost/changeset/77856

Log:
Finalizing Voronoi documentation.

Text files modified:
   sandbox/gtl/doc/index.htm | 21 ++--
   sandbox/gtl/doc/voronoi_advanced_tutorial.htm | 108 ++++++++++++------------
   sandbox/gtl/doc/voronoi_basic_tutorial.htm | 79 ++++++++---------
   sandbox/gtl/doc/voronoi_benchmark.htm | 32 +++----
   sandbox/gtl/doc/voronoi_builder.htm | 96 +++++++++++----------
   sandbox/gtl/doc/voronoi_diagram.htm | 171 +++++++++++++++++++--------------------
   sandbox/gtl/doc/voronoi_main.htm | 124 +++++++++++++++-------------
   sandbox/gtl/doc/voronoi_predicates.htm | 66 ++++++++++-----
   sandbox/gtl/doc/voronoi_robust_fpt.htm | 73 +++++++---------
   sandbox/gtl/doc/voronoi_utils.htm | 54 ++++++------
   sandbox/gtl/libs/polygon/example/voronoi_basic_tutorial.cpp | 2
   11 files changed, 422 insertions(+), 404 deletions(-)

Modified: sandbox/gtl/doc/index.htm
==============================================================================
--- sandbox/gtl/doc/index.htm (original)
+++ sandbox/gtl/doc/index.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -1,6 +1,5 @@
 <!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: Main Page</title>
@@ -15,6 +14,8 @@
 
 
 
+
+
     <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">
@@ -101,19 +102,19 @@
 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.&nbsp; </p><img src="images/hand.png" border="0" height="277" width="837" /><p>
-One of important features of the library is implementation of
-generic sweepline algorithm to build Voronoi diagrams in 2D (developed
+One of important features of the library is the implementation of
+generic sweepline algorithm to construct Voronoi diagrams of points and linear segments in 2D (developed
 as part of GSoC 2010 program). Voronoi diagram data structure has
 applications in image segmentation, optical character recognition,
 nearest neighbor queries execution. It is closely related with other
 computational geometry concepts: Delaunay triangulation, medial axis,
-straight skeleton, largest empty circle. Boost.Polygon library
+straight skeleton, the largest empty circle. The Boost.Polygon library
 provides interface to construct Voronoi diagrams of points figure a and
 line segments figure b (the last could be used to discretize any
-two-dimensional curve). Figure c contains example of medial axis of a
+two-dimensional curve). Figure c contains 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 Voronoi main page.<br />
+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>
@@ -238,10 +239,10 @@
         <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 library details.</li>
+ to construct, traverse, visualize, associate data with Voronoi diagrams without digging into the library details.</li>
         <li>Voronoi Advanced Tutorial
- Learn how to configure Voronoi builder and Voronoi diagram
- data structure with user provided coordinate types. </li>
+ Learn how to configure the Voronoi builder and Voronoi diagram
+ data structure with the user provided coordinate types. </li>
 </ul>
 
 </li></ul>

Modified: sandbox/gtl/doc/voronoi_advanced_tutorial.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_advanced_tutorial.htm (original)
+++ sandbox/gtl/doc/voronoi_advanced_tutorial.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -12,6 +12,7 @@
 
 
 
+
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Polygon Usage</title></head><body>
 
 <h1>Voronoi Advanced Tutorial<br>
@@ -59,17 +60,17 @@
 <h3>Discretization of input geometries</h3>
 
 
-To show how good is default input coordinate type provided by Voronoi
-we would discretize the whole area of Mars. That would be approximately
+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 *&nbsp; 10^8&nbsp; square kilometres that is equal to 1.44 *&nbsp;
 10^18&nbsp; square centimetres, which could be snapped to the integer
-grid with a side of 1.2 * 10^9 centimetres.&nbsp; To make Voronoi graph
+grid with a side of 1.2 * 10^9 centimetres.&nbsp; 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&nbsp; piece will
+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 Red planet surface within a 1 centimetre
-precision using default input coordinate type (signed 32 bit integer). That would imply maximum absolute error to be
+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>
@@ -81,14 +82,14 @@
 <h3>Output analysis</h3>
 
 
-Estimates of the resulting Voronoi diagram precision were already discussed here.
+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
-radius of a complex molecule.
+a radius of a complex molecule.
 
-We would like to notice that the absolute error of a discretization step is much higher than the one
+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>
 
 
@@ -104,24 +105,24 @@
 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 integrated circuit (distance should be not less than
+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 minimal distance between components of the input
-set of points and segments corresponds to one of the Voronoi
+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
-Voronoi graph, extract pair of input geometries that form it and find
-distance between those. As the total amount of such edges is O(N) value
-(N - is the number of input geometries) minimal distance could be
-efficiently find in linear time once we construct the diagram.<br>
+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
+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>
@@ -130,8 +131,8 @@
 
 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
-radius of an electron. However in this particular case we are not
-interested in the precision, rather in topology. As it was noticed on
+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
@@ -144,45 +145,43 @@
 
 
 
-<h2>Conclusions</h2>
-Above two examples show usage of the default Voronoi coordinate types
+<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 default coordinate types provide. There are
+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 coordinates of output Voronoi diagram
+ <li>The absolute error of the coordinates of the output Voronoi diagram
 inside the 32-bit integer discretization grid is slightly smaller than
-absolute error of discretization itself, thus could be neglected at all.</li>
+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 map of the Mars within 0.5
+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 subatomic precision. I guess the answer for both questions
-would be "No". And that actually means that error of discretization
-step could be neglected comparing to the error produced by measuring
+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 receive output geometries within smaller
-relative error, follow next paragraph.<br>
+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
-tutorial we are going to extend input coordinate type to 48 bit signed
-integer and output coordinate type to 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 MSVC (MSVC doesn't
-support 80 bit long double type; ieee754.h header is required), it
-should give clear understanding of how the library supports user
+<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 voronoi coordinate type traits that satisfy set of restrictions explained here:<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;">&nbsp; typedef boost::int64_t int_type;</span><br style="font-family: Courier New,Courier,monospace;">
@@ -197,18 +196,18 @@
 <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 64 bit signed integer type to handle our
+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
+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.
-Big int type should be capable to handle 48 * 64 bit integers, that is
+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&lt;128&gt;</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
+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 floating-point architecture and its usage to compare floating-point values), but to notice declaration is following:<br>
+here as it requires deep understanding of the floating-point architecture and its usage to compare floating-point values), 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;">&nbsp; enum Result {</span><span style="font-family: Courier New,Courier,monospace;"><br>
@@ -219,7 +218,7 @@
 <span style="font-family: Courier New,Courier,monospace;">&nbsp; 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 <span style="font-family: Courier New,Courier,monospace;">my_fpt_converter</span> structure (converts integer types to floating-point type):<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;">&nbsp; template &lt;typename T&gt;</span><br style="font-family: Courier New,Courier,monospace;">
@@ -240,7 +239,7 @@
 <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 Voronoi diagram
+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;">
@@ -268,10 +267,9 @@
 <span style="font-family: Courier New,Courier,monospace;">&nbsp; } 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>
-We simply declared Voronoi primitive types, type converter and vertex
-equality predicate using new coordinate type and corresponding ulp
-comparison structure. As we are done with declaration of coordinate
+<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>
@@ -288,19 +286,19 @@
 <span style="font-family: Courier New,Courier,monospace;">&nbsp; 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 Voronoi diagram and this is done with two lines of code:<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&lt;fpt80, my_voronoi_diagram_traits&gt; vd;</span><br>
 <span style="font-family: Courier New,Courier,monospace;">vb.construct(&amp;vd);<br>
 <br>
-</span>From this point user can operate with Voronoi diagram structure
+</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
-declaration of the ulp comparison structure. The library provides
-efficient well-commented cross-platform implementation for 64 bit
+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 default
+that implementation, but before doing that really consider if&nbsp; the default
 coordinate types are not capable to solve your problem.<br>
 <br>
 <table class="docinfo" id="table1" frame="void" rules="none">

Modified: sandbox/gtl/doc/voronoi_basic_tutorial.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_basic_tutorial.htm (original)
+++ sandbox/gtl/doc/voronoi_basic_tutorial.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -8,36 +8,36 @@
 
 
 
+
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Polygon Usage</title></head><body>
 
 <h1>Voronoi Basic Tutorial<br>
 </h1>
-<p>In this tutorial we will cover basic usage of the Boost.Polygon
-Voronoi library. In most cases this should cover all you need from the
-library. Below we will discuss following topics:<br>
+<p>In this tutorial we will cover the basic usage of the Boost.Polygon
+Voronoi library that should be enough for 95% of cases. Below we will discuss the following topics:<br>
 </p>
 <ul>
   <li>preparing input geometries;<br>
   </li>
   <li>construction of the Voronoi diagram;</li>
- <li>traversing Voronoi graph;<br>
+ <li>Voronoi graph traversal;<br>
   </li>
- <li>associating user data with Voronoi primitives;</li>
- <li>rendering Voronoi diagram.</li>
-</ul>In the example that goes through this tutorial (voronoi_basic_tutorial.cpp)
+ <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 Voronoi diagram of a few points and segments.
-On the image below one may see rendered diagram. Primary Voronoi edges
+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. Primary Voronoi edges
 are marked with
-black, non-primary with green, input geometries have blue color. In
-case you forgot we split each input segment onto three sites (segment
+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 start don't forget to:<span style="font-family: Courier New,Courier,monospace;"><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;<br>
@@ -56,7 +56,7 @@
 &nbsp; int y() const { return y_; }<br>
 <br>
 private:<br>
-&nbsp; // Don't forget should be cast to the signed int32 type!<br>
+&nbsp; // Should be castable to the signed int32 type!<br>
 &nbsp; int x_;<br>
 &nbsp; int y_;<br>
 };</span><span style="font-family: Courier New,Courier,monospace;"><br>
@@ -75,7 +75,7 @@
 &nbsp; Point p1_;</span><br>
 <span style="font-family: Courier New,Courier,monospace;">};<br>
 <br>
-</span>Once declared we can create sample input:<br>
+</span>Once those are declared we can create the sample input:<br>
 <br>
 <span style="font-family: Courier New,Courier,monospace;">std::vector&lt;Point&gt; points;<br>
 points.push_back(Point(0, 0));<br>
@@ -90,18 +90,17 @@
 
 
 
-Now let's construct Voronoi diagram of the input set of points and segments:<br>
+Now let's construct the Voronoi diagram of the input set of points and segments:<br>
 <br>
 <span style="font-family: Courier New,Courier,monospace;">voronoi_diagram&lt;double&gt; vd;<br>
 construct_voronoi(points, segments, &amp;vd);<br>
 <br>
 </span>So brief, isn't that awesome!<br>
-<h2>Traversing Voronoi Graph</h2>
-
-At the next step we are going to traverse Voronoi graph and count the
-number of visited edges. There are three ways to do that and we are going to cover all of them:<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 Voronoi edges (counts each edge twice):<br>
+ <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&lt;double&gt; &amp;vd) {<br>
 &nbsp; int result = 0;<br>
 &nbsp; for (voronoi_diagram&lt;double&gt;::const_edge_iterator it = vd.edges().begin();<br>
@@ -113,7 +112,7 @@
 }</span><br>
     <span style="font-family: Courier New,Courier,monospace;">&nbsp;</span><br>
   </li>
- <li>iterating over Voronoi cell and then traversing edges around that cell (counts each edge twice):<br>
+ <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&lt;double&gt; &amp;vd) {<br>
 &nbsp; int result = 0;<br>
@@ -133,8 +132,8 @@
     <br>
   </li>
   
- <li>iterating over Voronoi
-vertices and then traversing edges around that vertex (number of
+ <li>iterating over the Voronoi
+vertices and then traversing edges around each vertex (number of
 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&lt;double&gt; &amp;vd) {<br>
@@ -166,8 +165,8 @@
   <li>associating color 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 first example and will try to associate total number of incident edges with each cell.<br>
-Note: Each Voronoi primitive contains mutable pointer to void* type, that enables to associate any type of data with it.<br>
+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 void* type, that allows to associate any type of data with it.<br>
 <br>
 <span style="font-family: Courier New,Courier,monospace;">std::vector&lt;int&gt; 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>
@@ -185,9 +184,9 @@
 &nbsp; cell.data(&amp;counts.back());<br>
 }</span><span style="font-family: Courier New,Courier,monospace;"><br>
 </span><br>
-Note: In the example above we could not simply use count variable
+Note: In the example above we could not use count variable
 without a vector, because pointer to it will become invalid as soon as
-we leave the scope of enclosing for-loop.<br>
+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 resulting
@@ -199,9 +198,10 @@
 </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>
-All this functionality is already implemented in the Voronoi utils.
-Before clipping edges we should define clipping rectangle. It is
-usually handy to choose it so that it wraps all the input geometries
+<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&lt;double&gt; bbox;<br>
@@ -213,12 +213,11 @@
 }<br>
 // Add 10% offset to the bounding rectangle.<br>
 bbox = voronoi_utils&lt;double&gt;::scale(bbox, 1.1);</span><span style="font-family: Courier New,Courier,monospace;"><br>
-</span><br>
-Lets consider that we have 3rd party library function that draws segments using following prototype:<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 function that renders our diagram edges will have following implementation:<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&lt;double&gt; &amp;vd,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@@ -236,8 +235,7 @@
 &nbsp;&nbsp;&nbsp; else<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Parabolic edges are always finite.<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; voronoi_utils&lt;double&gt;::discretize(*it, 1E-1, polyline);<br>
-&nbsp;&nbsp;&nbsp; // Note: discretized edges may also lie outside of the bbox.<br>
-&nbsp;&nbsp;&nbsp; // So user might do additional clipping before rendering each such edge.&nbsp; <br>
+&nbsp;&nbsp;&nbsp; // Note: discretized edge segments may also lie outside of the bbox.<br>
 &nbsp;&nbsp;&nbsp; for (int i = 1; i &lt; polyline.size(); ++i)<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; draw_segment(polyline[i-1].x(), polyline[i-1].y(),<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@@ -245,20 +243,19 @@
 &nbsp; }<br>
 }<br>
 <br>
-</span>voronoi_visualizer.cpp
+</span>voronoi_visualizer.cpp
 contains a simple fully featured implementation of the Voronoi diagram
 renderer using Qt libraries. It was used to generate all the .png
-drawings under voronoi_example directory.<span style="text-decoration: underline;"><br>
+drawings under ./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
+</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 diagram primitives and
 using Voronoi utilities. In
-default mode Voronoi diagram operates with signed int (32 bit) input
-coordinate type and double (64 bit) output coordinate type. In Voronoi Advanced Tutorial we explain why this is enough in 95% of problems and how to configure algorithm coordinate types for the other 5%.<br>
+default mode Voronoi diagram operates with signed int (32-bit) input
+coordinate type and double (64-bit) output coordinate type. In Voronoi Advanced Tutorial we explain why this is enough for 95% of problems and how to expand the algorithm coordinate types for the other 5% of cases.<br>
 <span style="font-family: Courier New,Courier,monospace;"></span><br>
 <table class="docinfo" id="table1" frame="void" rules="none">
         <colgroup>

Modified: sandbox/gtl/doc/voronoi_benchmark.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_benchmark.htm (original)
+++ sandbox/gtl/doc/voronoi_benchmark.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -19,6 +19,7 @@
 
 
 
+
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Contents</title></head><body>
 
@@ -82,8 +83,7 @@
                                 <li>Layout Versus Schematic Tutorial</li>
                                 <li>Minkowski Sum Tutorial</li>
                                 <li>Voronoi Basic Tutorial</li>
- <li><a href="voronoi_diagram_advanced_tutorial.htm">Voronoi
- Diagram Advanced Tutorial</a></li>
+ <li>Voronoi Advanced Tutorial</li>
                         </ul>
                 </div>
                 <h3 class="navbar">Polygon Sponsor</h3>
@@ -97,7 +97,7 @@
                 <h1>Voronoi Benchmark</h1>There are not many known Voronoi libraries that are capable to satisfy following set of conditions:<br>
       <ul>
         <li>could handle both point and segment input geometries;</li>
- <li>give exact warranties about algorithm robustness and output topology;<br>
+ <li>give exact warranties about the algorithm robustness and output topology;<br>
         </li>
         <li>compute output geometries within precision of the output coordinate type.</li>
       </ul>
@@ -105,7 +105,7 @@
 (it is clearly defined in CGAL documentation that it's capable to
 handle the first two items, however there are no warranties on the
 output geometries precision). Taking into account that CGAL is
-well-known in
+well-known in the
 computational geometry area it should be clear why it is the main
 target of this benchmark comparison. Other libraries (OpenVoronoi, QHull, Triangle), that at least
 partially satisfy above requirements would be added to this benchmark
@@ -113,7 +113,7 @@
       <h2>Important<br>
       </h2>
 While results of this benchmark show complete dominance of
-Boost.Polygon over CGAL implementation, we would like to make it clear
+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 were CGAL incremental approach would
 be still more vital than sweepline approach (e.g. input sites are inserted as a live stream
@@ -123,15 +123,14 @@
 
       </h2>
 
-The benchmark consists of two parts. The first one constructs Voronoi diagram of a set of random points (voronoi_benchmark_points.cpp), the second one constructs Voronoi diagram of a set of random segments (voronoi_benchmark_segments.cpp).
-Below we list important details about benchmark, Boost and CGAL
-implementation that should be considered while reviewing benchmark
-details:<br>
+The benchmark consists of the two parts. The first one constructs the Voronoi diagram of a set of random points (voronoi_benchmark_points.cpp), the second one constructs the Voronoi diagram of a set of random segments (voronoi_benchmark_segments.cpp).
+Below we list important details about the benchmark, Boost and CGAL
+implementation that should be considered while reviewing benchmark results:<br>
       <ul>
- <li>we ensure that input data sets are the same for both 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;<br>
+ <li>We ensure that input data sets are the same for both 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;<br>
         </li>
- <li>there is no Voronoi diagram data structure in CGAL at the
+ <li>There is no Voronoi diagram data structure in CGAL at the
 moment. That's why we use Segment Delaunay Graph which is topologically
 dual to Voronoi diagram;</li>
         <li>CGAL
@@ -141,13 +140,10 @@
 storage required for those in our benchmarks. Thus one may expect
 Boost.Polygon Voronoi to be even more faster in comparison with CGAL.<br>
         </li>
- <li>Boost and CGAL library use completely different approaches
-to construct Voronoi diagram: sweepline and incremental algorithms
-respectively;<br>
- </li>
- <li>Boost and CGAL implementation consider each input segment
+
+ <li>The Boost and CGAL implementation 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
+time and memory usage for Voronoi of segments would be approximately at least 3 times
 slower than for Voronoi of points;<br>
         </li>
       </ul>

Modified: sandbox/gtl/doc/voronoi_builder.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_builder.htm (original)
+++ sandbox/gtl/doc/voronoi_builder.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -14,6 +14,7 @@
 
 
 
+
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Contents</title></head><body>
 
@@ -56,7 +57,7 @@
                                 <li>Property Merge 90</li>
                                 <li>Property Merge 45</li>
                                 <li>Property Merge</li>
- <li><a href="voronoi_main.hpp">Voronoi Main Page<br>
+ <li><a href="voronoi_main.htm">Voronoi Main Page<br>
 </a></li>
         <li>Voronoi Benchmark<br>
         </li>
@@ -77,8 +78,7 @@
                                 <li>Layout Versus Schematic Tutorial</li>
                                 <li>Minkowski Sum Tutorial</li>
                                 <li>Voronoi Basic Tutorial</li>
- <li><a href="voronoi_diagram_advanced_tutorial.htm">Voronoi
- Diagram Advanced Tutorial</a></li>
+ <li>Voronoi Advanced Tutorial</li>
                         </ul>
                 </div>
                 <h3 class="navbar">Polygon Sponsor</h3>
@@ -96,9 +96,9 @@
                 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 and give enough information to
- construct Voronoi diagram of a set of points and segments. The
- requirements for the input / output coordinate types of the builder
+ Voronoi diagram edges and vertices, thus giving enough information to
+ construct the Voronoi diagram of a set of points and segments. The
+ requirements for the input/output coordinate types of the builder
                 geometries are not the same as for the rest of the Boost.Polygon library.
                 The main differences are in the following: 1) The input coordinate type
                 is not required to be integral (while it still should be integer type);
@@ -118,20 +118,20 @@
                 - 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 types used by VP.<br>
+ - defines input/output coordinate types used by VP.<br>
                 <font face="Courier New">
                 <span style="font-family: 'Courier New',Courier,monospace;">VP</span></font>
- - predicates kernel, that provides builder with robust and efficient
+ - predicates kernel, that provides builder with the robust and efficient
                 predicates.<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 input
- coordinate range to other integer types (e.g. 64-bit integer), however
- this will also require manual set up of coordinate type traits. Default
+ 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&lt;<font face="Courier New"><span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>&gt;
- implementation provides correct predicates as soon as
+ structure provides correct predicates as soon as
                 <font face="Courier New">
                 <span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>
- types satisfy requirements explained below. In case those requirements
+ types satisfy the requirements explained below. 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">
@@ -156,14 +156,14 @@
 &nbsp;&nbsp;&nbsp; const int_type&amp; x,<br>
 &nbsp;&nbsp;&nbsp; const int_type&amp; y)</span><br>
             </td>
- <td style="vertical-align: top;">Inserts point object with specified coordinates into Voronoi builder. <br>
+ <td style="vertical-align: top;">Inserts point object with the specified coordinates into the Voronoi builder. <br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top;"><span style="font-family: Courier New,Courier,monospace;">template &lt;typename PointType&gt;</span><br style="font-family: Courier New,Courier,monospace;">
             <span style="font-family: Courier New,Courier,monospace;">void insert_point(const PointType&amp; point)</span><br>
             </td>
- <td style="vertical-align: top;">Inserts point object into Voronoi builder.<br>
+ <td style="vertical-align: top;">Inserts point object into the Voronoi builder.<br>
 
                                 Point object should support x() and y() methods to retrieve its coordinates.<br>
             </td>
@@ -176,7 +176,7 @@
 &nbsp;&nbsp;&nbsp; PointIterator last_point)<br>
                                 </td>
                                 <td style="vertical-align: top;" width="693">Inserts point
- objects into Voronoi builder.<br>
+ objects into the Voronoi builder.<br>
                                 Point objects should support x() and y() methods to retrieve
                                 their coordinates.<br>
                                 </td>
@@ -188,7 +188,7 @@
 &nbsp;&nbsp;&nbsp; const int_type&amp; x2,<br>
 &nbsp;&nbsp;&nbsp; const int_type&amp; y2)</span><br>
             </td>
- <td style="vertical-align: top;">Insert segment object with specified coordinates into Voronoi builder.<br>
+ <td style="vertical-align: top;">Inserts segment object with the specified coordinates into the Voronoi builder.<br>
             </td>
           </tr>
           <tr>
@@ -197,16 +197,16 @@
 &nbsp;&nbsp;&nbsp; const PointType&amp; point1,<br>
 &nbsp;&nbsp;&nbsp; const PointType&amp; point2)</span><br>
             </td>
- <td style="vertical-align: top;">Insert segment object with specified endpoints into Voronoi builder.<br>
-Endpoint objects should support x() and y() methods to retrieve their coordinates.<br>
+ <td style="vertical-align: top;">Inserts segment object with the specified endpoints into the Voronoi builder.<br>
+Endpoint object should support x() and y() methods to retrieve its coordinates.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">template &lt;typename SegmentType&gt;<br>
 void insert_segment(const SegmentType&amp; segment)<br>
             </td>
- <td style="vertical-align: top;">Insert segment object into Voronoi builder.<br>
-Segment object should support low() and high() methods that retrieve segment endpoints.<br>
+ <td style="vertical-align: top;">Inserts segment object into the Voronoi builder.<br>
+Segment object should support low() and high() methods to retrieve its endpoints.<br>
 Endpoint object should support x() and y() methods to retrieve its coordinates.<br>
             </td>
           </tr>
@@ -216,11 +216,10 @@
                                 void insert_segments(SegmentIterator first_segment, SegmentIterator last_segment)<br>
                                 </td>
                                 <td style="vertical-align: top;" width="693">Inserts segment
- objects into Voronoi builder.<br>
- Segment objects should support low() and high() methods to
- retrieve segment endpoints.<br>
- Endpoint objects should support x() and y() methods to
- retrieve their coordinates.<br>
+ objects into the Voronoi builder.<br>
+Segment object should support low() and high() methods to retrieve its endpoints.<br>
+ Endpoint object should support x() and y() methods to
+ retrieve its coordinates.<br>
                                 </td>
                         </tr>
                         <tr>
@@ -234,7 +233,7 @@
                                 </td>
                                 <td style="vertical-align: top;" width="693">Inserts point and
                                 segment objects into Voronoi builder.<br>
- Requirements for the point and segment objects interface are
+ Requirements for the point and segment object interface are
                                 given above.<br>
                                 </td>
                         </tr>
@@ -246,7 +245,7 @@
                                 <td style="vertical-align: top;" 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 to process them. For
+ 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
@@ -263,7 +262,7 @@
                         </tr>
                 </tbody></table>
                 <h1>Voronoi Coordinate Type Traits</h1>
- <p>The library provides default builder coordinate type traits for the
+ <p>The library provides 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 &lt;typename T&gt;<br>
@@ -282,13 +281,15 @@
 &nbsp;&nbsp;&nbsp; typedef type_converter_efpt to_efpt_converter_type;<br>
                 };</p>
                 </font>
- <p>One of the most important features of the library is that Voronoi
- builder output geometries are constructed with defined relative error.
- 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 default Voronoi builder predicates
- implementation user should provide following set of coordinate types (assumption
- is made that input geometries have X-bit signed integer coordinate type):<br>
+ <p>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>
                 </p>
                 <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
                         <tbody><tr>
@@ -345,7 +346,7 @@
                                 ulp_cmp_type<br>
                                 </td>
                                 <td style="vertical-align: top;">Ulp comparison structure that
- checks if two fpt_type values are withing given ulp range
+ checks if two fpt_type values are withing the given ulp range
                                 (relative error range).<br>
                                 </td>
                         </tr>
@@ -370,19 +371,20 @@
                         
                 </tbody></table>
                 <p>Notes:<br>
- 1) 4 different integer types are used (instead of a single big_int_type) to slightly improve algorithm performance and memory
- usage.<br>
- 2) As maximum required size of the big_int_type is known in advance
- library provided implementation of fixed integers could be used, which
- is much faster than heap-allocated big integers.<br>
-3) two separate floating-point types are defined because for input with
+1) Four different integer types are used (instead of a single
+big_int_type) to slightly improve algorithm performance and memory
+usage.<br>
+ 2) 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).<br>
+3) 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.<br>
- 4) efpt_type and to_efpt_converter_type are not used to construct
- Voronoi of points (mocks will work fine).<br>
- 5) for an example of the user defined builder coordinate type traits see
+types, however this is not supported by MSVC compiler.<br>
+ 4) efpt_type and to_efpt_converter_type are not used to construct the
+ Voronoi diagram of points (mocks will work fine).<br>
+ 5) For an example of the user defined builder coordinate type traits see
                 <a href="voronoi_advanced_tutorial.htm">advanced Voronoi tutorial</a>.</p></td>
         </tr>
         <tr>

Modified: sandbox/gtl/doc/voronoi_diagram.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_diagram.htm (original)
+++ sandbox/gtl/doc/voronoi_diagram.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -24,6 +24,7 @@
 
 
 
+
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Contents</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>
 
@@ -94,7 +95,7 @@
                                 <li>Layout Versus Schematic Tutorial</li>
                                 <li>Minkowski Sum Tutorial</li>
                                 <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
                         </ul>
                 </div>
                 <h3 class="navbar">Polygon Sponsor</h3>
@@ -106,30 +107,28 @@
                 <br>
                 <p></p>
       
- <h1>Voronoi Diagram</h1>
-Voronoi
+ <h1>Voronoi Diagram</h1>Voronoi
 diagram is a computational geometry concept that represents partition
 of a given space onto regions, with bounds determined by distances to a
 specified family of objects. The application area of this concept vary from Archaeology to Zoology. Boost.Polygon provides implementation of
-Voronoi diagram data structure in 2D space. Internal representation
+the Voronoi diagram data structure in 2D space. Internal representation
 consists of a three arrays, that respectively contain: Voronoi cells
 (area around input sites bounded by Voronoi edges), Voronoi vertices
 (points where three or more Voronoi edges intersect), Voronoi edges
 (one dimensional curves containing points equidistant from the two
 closest input sites). Each of the primitives (cell, vertex, edge)
-contains pointers to other linked primitives, so that it's always
-possible to efficiently traverse Voronoi diagram. Picture below shows
+contains pointers to the other linked primitives, so that it's always
+possible to efficiently traverse the Voronoi graph. Picture below shows
 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 three sites: segment itself and two
-endpoints). As one may notice each segment is split onto segment
-site itself and both its endpoints. As the result two additional
+correspond to the Voronoi cells in blue. It is considered that each
+input segment consists of three sites: segment itself and its
+endpoints. As the result two additional
 Voronoi edges are constructed per each segment. This is made to
 simplify representation of the Voronoi diagram.<br>
       <br>
       <img style="border: 1px solid ; width: 300px; height: 300px;" alt="" src="images/voronoi2.png"><br>
       <br>
-Voronoi diagram declaration and list of member functions is following:<br>
+Voronoi diagram declaration and list of the member functions is following:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">template &lt;typename T, typename TRAITS = voronoi_diagram_traits&lt;T&gt; &gt;</span><br style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">class voronoi_diagram;<br>
@@ -152,47 +151,47 @@
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const cell_container_type &amp;cells() const<br>
             </td>
- <td style="vertical-align: top;">Returns const reference to Voronoi cells container.<br>
+ <td style="vertical-align: top;">Returns the const reference to the cell container.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const vertex_container_type &amp;vertices() const<br>
             </td>
- <td style="vertical-align: top;">Returns const reference to Voronoi vertices container.<br>
+ <td style="vertical-align: top;">Returns the const reference to the vertex container.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const edge_container_type &amp;edges() const<br>
             </td>
- <td style="vertical-align: top;">Returns const reference to Voronoi edges container.<br>
+ <td style="vertical-align: top;">Returns the const reference to the edge container.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">unsigned int num_cells() const<br>
             </td>
- <td style="vertical-align: top;">Returns number of cells in the Voronoi diagram.<br>
-This value should be the same as the size of cells container.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">unsigned int num_edges() const<br>
             </td>
- <td style="vertical-align: top;">Returns number of edges in the Voronoi diagram.<br>
-This value should be twice smaller then the size of edges container.<br>
-The reason is that we have two half-edges for each Voronoi edge.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">unsigned int num_vertices() const<br>
             </td>
- <td style="vertical-align: top;">Returns number of vertices in the Voronoi diagram.<br>
-This value should be the same as the size of vertices container.<br>
+ <td style="vertical-align: top;">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>
       <h1>Voronoi Edge</h1>
-Voronoi edge is represented as a bit improved classical half-edge data structure. The declaration and list of member functions is following:<br>
+Voronoi edge is represented as a bit improved classical half-edge data structure. The declaration and list of the member functions is following:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">template &lt;typename T&gt;</span><br style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">class voronoi_edge;<br>
@@ -209,184 +208,184 @@
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_cell_type *cell()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the Voronoi <span style="font-family: Courier New,Courier,monospace;"></span>cell that edge belongs to.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_cell_type *cell() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the Voronoi cell that edge belongs to.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the Voronoi cell that edge belongs to.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void cell(voronoi_cell_type *c)<br>
             </td>
- <td style="vertical-align: top;">Sets Voronoi cell pointer for the cell current edge belongs to.<br>
+ <td style="vertical-align: top;">Sets the Voronoi cell pointer for the cell current edge belongs to.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_vertex_type *vertex0()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the start point of the edge.<br>
+ <td style="vertical-align: top;">Returns the pointer to the start point of the edge.<br>
 If edge is infinite in that direction returns NULL.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_vertex_type *vertex0() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the start point of the edge.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the start point of the edge.<br>
 If edge is infinite in that direction returns NULL.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void vertex0(voronoi_vertex_type *v)<br>
             </td>
- <td style="vertical-align: top;">Sets start point pointer of the edge.<br>
+ <td style="vertical-align: top;">Sets the start point pointer of the edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_vertex_type *vertex1()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the end point of the edge.<br>
-If edge is infinite in that direction returns NULL.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_vertex_type *vertex1() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the end point of the edge.<br>
-If edge is infinite in that direction returns NULL.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">void vertex1(voronoi_vertex_type *v)<br>
             </td>
- <td style="vertical-align: top;">Sets end point pointer of the edge.<br>
+ <td style="vertical-align: top;">Sets the endpoint pointer of the edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_edge_type *twin()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer&nbsp; to the twin edge.<br>
+ <td style="vertical-align: top;">Returns the pointer to the twin edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_edge_type *twin() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the twin edge.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the twin edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void twin(voronoi_edge_type *e)<br>
             </td>
- <td style="vertical-align: top;">Sets twin edge pointer of the edge.<br>
+ <td style="vertical-align: top;">Sets the twin edge pointer of the edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_edge_type *next()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the CCW next edge within the corresponding Voronoi cell.<br>
+ <td style="vertical-align: top;">Returns the pointer to the CCW next edge within the corresponding Voronoi cell.<br>
 Edges not necessarily share a common vertex.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_edge_type *next() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the CCW next edge within the corresponding Voronoi cell.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the CCW next edge within the corresponding Voronoi cell.<br>
 Edges not necessarily share a common vertex.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void next(voronoi_edge_type *e)<br>
             </td>
- <td style="vertical-align: top;">Sets CCW next edge pointer of the edge.<br>
+ <td style="vertical-align: top;">Sets the CCW next edge pointer of the edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_edge_type *prev()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the CCW prev edge within the corresponding Voronoi cell.<br>
+ <td style="vertical-align: top;">Returns the pointer to the CCW prev edge within the corresponding Voronoi cell.<br>
 Edges not necessarily share a common vertex.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_edge_type *prev() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the CCW prev edge within the corresponding Voronoi cell.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the CCW prev edge within the corresponding Voronoi cell.<br>
 Edges not necessarily share a common vertex.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void prev(voronoi_edge_type *e)<br>
             </td>
- <td style="vertical-align: top;">Sets CCW prev edge pointer of the edge.<br>
+ <td style="vertical-align: top;">Sets the CCW prev edge pointer of the edge.<br>
             </td>
           </tr>
           
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void *data() const<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the data associated with the edge.<br>
+ <td style="vertical-align: top;">Returns the pointer to the data associated with the edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void data(void *d) const<br>
             </td>
- <td style="vertical-align: top;">Sets data pointer of the edge.<br>
-This allows user to associate any data type with the edge.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_edge_type *rot_next()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the CCW next edge rotated around the edge start point.<br>
-If edge is infinite in that direction returns NULL.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_edge_type *rot_next() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the CCW next edge rotated around the edge start point.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the CCW next edge rotated around the edge start point.<br>
 
-If edge is infinite in that direction returns NULL.</td>
+If the edge is infinite in that direction returns NULL.</td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_edge_type *rot_prev()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the CCW prev edge rotated around the edge start point.<br>
-If edge is infinite in that direction returns NULL.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_edge_type *rot_prev() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the CCW prev edge rotated around the edge start point.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the CCW prev edge rotated around the edge start point.<br>
 
 
-If edge is infinite in that direction returns NULL.</td>
+If the edge is infinite in that direction returns NULL.</td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">bool is_finite() const<br>
             </td>
- <td style="vertical-align: top;">Returns true if both endpoints of the edge are finite, else false.<br>
+ <td style="vertical-align: top;">Returns true if the both endpoints of the edge are finite, else false.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">bool is_linear() const<br>
             </td>
- <td style="vertical-align: top;">Returns true if edge is linear (segment, ray, line), else false.<br>
+ <td style="vertical-align: top;">Returns true if the edge is linear (segment, ray, line), else false.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">bool is_curved() const<br>
             </td>
- <td style="vertical-align: top;">Returns true if edge is curved (parabolic arc), else false.<br>
+ <td style="vertical-align: top;">Returns true if the edge is curved (parabolic arc), else false.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">bool is_primary() const<br>
             </td>
- <td style="vertical-align: top;">Returns false if the edge goes through segment endpoint, else true.<br>
+ <td style="vertical-align: top;">Returns false if the edge goes through the endpoint of the segment, else true.<br>
             </td>
           </tr>
         </tbody>
@@ -396,7 +395,7 @@
       <h1>Voronoi Cell</h1>
 
 Voronoi cell is represented by a site the cell contains and a pointer
-to the incident edge. The declaration and list of member functions is
+to the incident edge. The declaration and list of the member functions is
 following:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">template &lt;typename T&gt;<br>
@@ -409,7 +408,7 @@
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_cell(const point_type &amp;p1,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; voronoi_edge_type *edge)<br>
             </td>
- <td style="vertical-align: top;">Constructs Voronoi cell from the given point site and pointer to the one of boundary edges.<br>
+ <td style="vertical-align: top;">Constructs the Voronoi cell from the given point site and pointer to the one of the boundary edges.<br>
             </td>
           </tr>
           <tr>
@@ -417,65 +416,65 @@
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type &amp;p2,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; voronoi_edge_type *edge)<br>
             </td>
- <td style="vertical-align: top;">Constructs Voronoi cell from the given segment site and pointer to one of boundary edges.<br>
+ <td style="vertical-align: top;">Constructs the Voronoi cell from the given segment site and pointer to the one of the boundary edges.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const point_type &amp;point0() const<br>
             </td>
- <td style="vertical-align: top;">If cell contains point site returns it.<br>
-If cell contains segment site returns its first endpoint.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">const point_type &amp;point1() const<br>
             </td>
- <td style="vertical-align: top;">If cell contains point site returns it.<br>
-If cell contains segment site returns its second endpoint.<br>
+ <td style="vertical-align: top;">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="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_edge_type *incident_edge()<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to one of the boundary edges.<br>
+ <td style="vertical-align: top;">Returns the pointer to the one of the boundary edges.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_edge_type *incident_edge() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to one of the boundary edges.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the one of the boundary edges.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void incident_edge(voronoi_edge_type *e)<br>
             </td>
- <td style="vertical-align: top;">Sets incident boundary edge pointer of the cell.<br>
+ <td style="vertical-align: top;">Sets the incident boundary edge pointer of the cell.<br>
             </td>
           </tr>
           
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void *data() const<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the data associated with the cell.</td>
+ <td style="vertical-align: top;">Returns the pointer to the data associated with the cell.</td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void data(void *d) const<br>
             </td>
- <td style="vertical-align: top;">Sets data pointer of the cell.<br>
+ <td style="vertical-align: top;">Sets the data pointer of the cell.<br>
 
-This allows user to associate any data type with the cell.</td>
+This allows the user to associate any data type with the cell.</td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">bool contains_point() const</td>
- <td style="vertical-align: top;">Returns true if cell contains point site, else false.</td>
+ <td style="vertical-align: top;">Returns true if the cell contains a point site, else false.</td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">bool contains_segment() const</td>
- <td style="vertical-align: top;">Returns true if cell contains segment site, else false.</td>
+ <td style="vertical-align: top;">Returns true if the cell contains a segment site, else false.</td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">bool is_degenerate() const </td>
- <td style="vertical-align: top;">Returns true if cell doesn't have incident edge.<br>
+ <td style="vertical-align: top;">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>
@@ -486,7 +485,7 @@
 the Voronoi cell structure is equal to: 2 * sizeof(void *) + 4 *
 sizeof(coordinate_type).<br>
       <br>
-Following code snipped effectively traverses Voronoi edges around the Voronoi cell:<br>
+Following code snippet effectively traverses Voronoi edges around the Voronoi cell:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">const voronoi_edge&lt;double&gt; *edge = cell-&gt;incident_edge();</span><br>
       <span style="font-family: Courier New,Courier,monospace;">do {</span><br style="font-family: Courier New,Courier,monospace;">
@@ -495,7 +494,7 @@
       <span style="font-family: Courier New,Courier,monospace;">} while (edge != cell-&gt;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. The declaration and list of member
+and a pointer to the incident edge. The declaration and list of the member
 functions is following:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">template &lt;typename T&gt;</span><br style="font-family: Courier New,Courier,monospace;">
@@ -507,46 +506,46 @@
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_vertex(const point_type &amp;vertex, voronoi_edge_type *edge)<br>
             </td>
- <td style="vertical-align: top;">Constructs Voronoi vertex that corresponds to the give point and incident edge.<br>
+ <td style="vertical-align: top;">Constructs the Voronoi vertex that corresponds to the give point and incident edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const point_type &amp;vertex() const<br>
             </td>
- <td style="vertical-align: top;">Returns point that represents vertex.<br>
+ <td style="vertical-align: top;">Returns the point that represents vertex.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">voronoi_edge_type *incident_edge()<br>
             </td>
- <td style="vertical-align: top;">Returns incident edge pointer.<br>
+ <td style="vertical-align: top;">Returns the incident edge pointer.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">const voronoi_edge_type *incident_edge() const<br>
             </td>
- <td style="vertical-align: top;">Returns const pointer to the incident edge.<br>
+ <td style="vertical-align: top;">Returns the const pointer to the incident edge.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void incident_edge(voronoi_edge_type *e)<br>
             </td>
- <td style="vertical-align: top;">Sets incident edge pointer.<br>
+ <td style="vertical-align: top;">Sets the incident edge pointer.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void *data() const<br>
             </td>
- <td style="vertical-align: top;">Returns pointer to the data associated with the vertex.</td>
+ <td style="vertical-align: top;">Returns the pointer to the data associated with the vertex.</td>
           </tr>
           
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">void data(void *d) const<br>
             </td>
- <td style="vertical-align: top;">Sets data pointer of the cell.<br>
+ <td style="vertical-align: top;">Sets the data pointer of the cell.<br>
 
 
-This allows user to associate any data type with the vertex.</td>
+This allows the user to associate any data type with the vertex.</td>
           </tr>
         </tbody>
       </table>
@@ -568,8 +567,8 @@
       <h1>Voronoi Diagram Traits<br>
       </h1>
 
-Voronoi diagram traits are used to configure Voronoi diagram data
-structure. The declaration and list of required type definitions is
+Voronoi diagram traits are used to configure the Voronoi diagram data
+structure. The declaration and list of the required type definitions is
 following:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">template &lt;typename T&gt;</span><br style="font-family: Courier New,Courier,monospace;">
@@ -588,7 +587,7 @@
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">ctype_converter_type<br>
             </td>
             <td style="vertical-align: top;">Coordinate type converter structure.<br>
-Converts coordinates provided by Voronoi builder to the internal coordinate type.<br>
+Converts the coordinates provided by the Voronoi builder to the internal coordinate type.<br>
             </td>
           </tr>
           <tr>

Modified: sandbox/gtl/doc/voronoi_main.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_main.htm (original)
+++ sandbox/gtl/doc/voronoi_main.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -35,6 +35,7 @@
 
 
 
+
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Contents</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"></head><body>
 
@@ -120,10 +121,10 @@
       <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 Voronoi diagrams
-of a set of points and segments in 2D space with the following set of
+of a set of points and linear segments in 2D space with the following set of
 limitations:<br>
       <ul>
- <li>coordinates of input points and endpoints of segments
+ <li>coordinates of the input points and endpoints of the segments
 should be of integer type;</li>
         <li>input segments should not intersect
 except their endpoints.</li>
@@ -146,45 +147,51 @@
 degeneracies for some inputs, the algorithm produces wrong output for
 some inputs (e.g. point is considered to be outside of the polygon,
 while should be inside). In other words robust implementation doesn't
-fail and produces valid output in 100% of cases, thus user can rely on
+fail and produces expected output in 100% of cases, thus user can rely on
 it. Robustness is the 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. Voronoi implementation avoids the
+issues, numeric stability issues. Our implementation avoids the
 first type of issues using pure STL data structure, thus you won't find
 any operator new in the code. The second category of problems is
 resolved using multiprecision geometric predicates.
 Even for commercial implementations usage of such predicates usually
-results in huge performance slowdown. Here is another strong side of
-Voronoi: we avoid multiprecision computations in 95% of cases using
+results in 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 relative error arithmetic apparatus to identify them and switch to higher precision predicates when required.<br>
+exact, but we developed relative error arithmetic apparatus to identify them and switch to the higher precision predicates when required.<br>
       
- <h2>Precision of Output Structures<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
-output geometries. Here we will explain a bit what exactly
-"relatively precise" means and how received output may differ from
-theoretically correct one (here and after we assume that output
+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 IEEE-754 floating-point type).<br>
 <br>
-Voronoi implementation guaranties that relative error of the output
-geometries coordinates is always not higher then 64 machine epsilons (6
+Voronoi implementation guaranties that the relative error of the
+coordinates of the output
+geometries is always not higher then 64 machine epsilons (6
 bits of mantissa), while in many cases it is slightly less. That also
-means that using floating-point type with larger mantissa will produce
-more precise output. Lets consider following example: output Voronoi
-vertex has double (53 bit mantissa) x-coordinate equal to 1.0, then
-absolute error is at most 2^-53 * 2^6 = 2^-47 and exact value of
+means that using floating-point type with the larger mantissa will
+produce the output coordinates with more precise bits. Lets 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 exact value of x-coordinate lies in the range
-[2^31 - 2^-16, 2^31 + 2^16]. For 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 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 absolute and relative errors try this article.<br>
+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 absolute and relative errors try this article.<br>
 <br>
 During finalization step library unites Voronoi vertices whose both
 coordinates are situated within relative error range equal to 128
@@ -204,13 +211,13 @@
       
       <h2>Fully Functional with Segment Inputs</h2>
 
-There are not many implementations of Voronoi diagrams that could
-handle segment inputs, even considering commercial ones. Support of
+There are not many implementations of the Voronoi diagram construction algorithm that could
+handle 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
-medial axis transform of the arbitrary input geometry. So one may start
+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>
       
@@ -224,8 +231,8 @@
 static inline void construct_voronoi_points(<br>
 &nbsp;&nbsp;&nbsp; const PC &amp;points, VD *output)<br>
             </td>
- <td style="vertical-align: top;">Constructs Voronoi diagram of a set of points into the output data structure.<br>
-Coordinates of the input geometries should belong to [-2^31, 2^31-1] integer range.<br>
+ <td style="vertical-align: top;">Constructs the Voronoi diagram of a set of points into the output data structure.<br>
+Coordinates of the input geometries should belong to the [-2^31, 2^31-1] integer range.<br>
 PC is a container of points that supports forward iterator.<br>
             </td>
           </tr>
@@ -234,8 +241,8 @@
 static inline void construct_voronoi_segments(<br>
 &nbsp;&nbsp;&nbsp; const SC &amp;segments, VD *output)<br>
             </td>
- <td style="vertical-align: top;">Constructs Voronoi diagram of a set of segments into the output data structure.<br>
-Coordinates of the input geometries should belong to [-2^31, 2^31-1] integer range.<br>
+ <td style="vertical-align: top;">Constructs the Voronoi diagram of a set of segments into the output data structure.<br>
+Coordinates of the input geometries should belong to the [-2^31, 2^31-1] integer range.<br>
 SC is a container of segments that supports forward iterator.<br>
 Segment object should provide low(), high() public methods to retrieve endpoints of a segment.<br>
             </td>
@@ -245,22 +252,22 @@
 static inline void construct_voronoi(<br>
 &nbsp;&nbsp;&nbsp; const PC &amp;points, const SC &amp;segments, VD *output)<br>
             </td>
- <td style="vertical-align: top;">Constructs Voronoi diagram of a set of points and segments into the output data structure.<br>
-Coordinates of the input geometries should belong to [-2^31, 2^31-1] integer range.<br>
+ <td style="vertical-align: top;">Constructs the Voronoi diagram of a set of points and segments into the output data structure.<br>
+Coordinates of the input geometries should belong to the [-2^31, 2^31-1] integer range.<br>
             </td>
           </tr>
         </tbody>
       </table>
       <br>
-For users that don't want to go into the details of the library this
-means that it's possible to construct Voronoi diagram with the
+For the users that don't want to go into the details of the library this
+means that it's possible to construct the Voronoi diagram with the
 following two lines of code:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">voronoi_diagram&lt;double&gt; vd;</span><br style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">construct_voronoi(points, segments, &amp;vd);</span><br>
       <br>
-Isn't that simple? The library also provides clear interfaces to associate user data with output geometries, efficiently traverse Voronoi graph and utilities to visualize output primitives (e.g. discretization of parabolic edges, clipping of linear edges). More details on those is covered in the basic Voronoi tutorial.&nbsp; Advanced usage of the library with configuration of the coordinate types is explained in the advanced Voronoi tutorial.<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 is covered in the basic Voronoi tutorial.&nbsp; Advanced usage of the library with the configuration of the coordinate types is explained in the advanced Voronoi tutorial.<br>
       <h2>No Third Party Dependencies<br>
       </h2>
 Yes, the library doesn't depend on any 3rd party code. Even more than
@@ -272,46 +279,49 @@
 
       
       <h2>Extensible for User Provided Coordinate Types</h2>
-
-Voronoi implementation is coordinate type agnostic. That means that as soon as user provided types satisfy set of Voronoi builder coordinate type traits restrictions
-and implement library required methods no changes are required neither
-from algorithm, nor from predicates implementation. So it's possible to
-construct Voronoi diagram for 256 bit integer input coordinate type and
-512 bit output floating-point type without changing any internal code.<br>
+Our implementation is coordinate type agnostic. That means that as soon
+as the user provided types satisfy set of restrictions of the Voronoi builder coordinate type traits
+and implement the library required methods no changes are required neither
+from 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 list of main directions for the future development of the library.<br>
-High-priority tasks that already have approximate implementation plan (some of those may be proposed as future GSoC projects):<br>
+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 Voronoi builder.</li>
+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 Voronoi diagram has completely the same geometry
-as medial axis (they are 100% equal), however for many applications
-user is not interested in diagram inside hole regions. The main point
+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>Implementing data structure built on top of Voronoi diagram that allows to execute nearest neighbor queries in O(log N) time.<br>
-Note: there should be r-tree data structure available soon in the Boost libraries.</li>
+Note: there should be r-tree data structure available soon as part of the Boost libraries.</li>
         
         <li>Providing interface to retrieve convex hull of a set of
 points and segments from Voronoi builder once the Voronoi diagram is
 constructed in O(N) time.<br>
 </li>
- <li>Closer integration with interfaces and functionality of Boost Polygon Library.<br>
+ <li>Closer integration with the interfaces and functionality of Boost Polygon Library.<br>
         </li>
       </ul>
 High-priority tasks to be considered:<br>
       <ul>
+ <li>Dropping restriction on the non-intersecting input geometries.</li>
         <li>Integration of Voronoi diagram structure with BGL (Boost Graph Library).</li>
- <li>Support of other types of distance metrics.</li>
- <li>Construction of constrained Delaunay triangulation.</li>
- <li>Support of circle input geometries.</li>
- <li>Dropping restriction on non-intersecting input geometries.</li>
+
+ <li>Support of the other types of distance metrics.</li>
+ <li>Construction of the constrained Delaunay triangulation.</li>
+ <li>Support of the circle input geometries.</li>
+
 
       </ul>
 Based on the community suggestions priorities may be changed.<br>
@@ -319,17 +329,17 @@
       <h2>Theoretical Research<br>
 
       </h2>Voronoi
-was developed as part of Google Summer of Code 2010. The
+was developed as part of the Google Summer of Code 2010. The
 library was actively maintained for the last two years and involved
-strong math research in the field of algorithms, data structures,
+the strong mathematical research in the field of algorithms, data structures,
 relative error arithmetic and numerical robustness. Nowadays one can
 often read scientific article that contains non-practical theoretical
 results or implementation with
 benchmarks nobody else can reproduce. The opposite story is with
-Voronoi. We provide pure implementation and benchmarks one may run on
+the Boolst.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 Steven Fortune's article <span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-weight: bold;"></span></span>"A Sweepline algorithm for Voronoi diagrams", that contains fundamental ideas of the current implementation.<br>
+authors would like to acknowledge Steven Fortune's article <span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-weight: bold;"></span></span>"A Sweepline algorithm for Voronoi diagrams", that contains the fundamental ideas of the current implementation.<br>
 
 
 

Modified: sandbox/gtl/doc/voronoi_predicates.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_predicates.htm (original)
+++ sandbox/gtl/doc/voronoi_predicates.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -14,6 +14,7 @@
 
 
 
+
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Contents</title></head><body>
 
@@ -84,7 +85,7 @@
                                 <li>Layout Versus Schematic Tutorial</li>
                                 <li>Minkowski Sum Tutorial</li>
                                 <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
                         </ul>
                 </div>
                 <h3 class="navbar">Polygon Sponsor</h3>
@@ -97,12 +98,11 @@
                 <p></p>
                 <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 geometric
-predicates used by Voronoi builder. Except of those it also provides
-functors that allow to compute coordinates of centers of inscribed
+or false (e.g. it may answer a question: "is it sunny today?").<br>The 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 the coordinates of the centers of the inscribed
 circles (those correspond to the Voronoi vertices) within the given
-relative error precision range. This means that the more mantissa bits
+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
@@ -110,14 +110,14 @@
       
       <h2>Geometric Predicates</h2>
 
-The main issues with implementation of any complex geometric
-algorithm arise when dealing with robustness of geometric predicates.
+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 commercial projects stand strong against
+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 following code snippet, that could
-be used to compute orientation of three points:<br>
+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;">&nbsp; return dx1 * dy2 - dx2 * dy1;</span><br style="font-family: Courier New,Courier,monospace;">
@@ -139,53 +139,73 @@
 corrupting algorithm underlying structures or producing completely
 invalid output. Voronoi uses
 slightly more complex predicates. To insure that they are robust and
-efficient approach that combines two known techniques is used: lazy
+efficient the approach that combines two known techniques (lazy
 arithmetic and multiple
-precision computations.<br>
+precision computations) is used.<br>
  
       
       <h2>Lazy Arithmetic</h2>
 Lazy
-arithmetic is based on usage of IEEE-754 floating-point types to evaluate an expression. While this approach has a good speed
+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 evaluated result belongs to and based on that we can
+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 precision type. The way relative errors are
+expression using multiprecision type. The way relative errors are
 evaluated is explained in the Voronoi Robust FPT section.<br>
       <h2>Multiple Precision Arithmetic</h2>
 In the vast majority of cases
-lazy arithmetic approach produces correct result thus further
-processing is not required. In other cases Voronoi defined or user
+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>
+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 ?&lt; 0;<br>
+
 After math. transform: (A*D + B*C) / (B * D) ?&lt; 0;<br>
+
       <br>
+
 Predicate: sqrt(A) ?&lt; 1.2;<br>
+
 After math. transform: A ?&lt; 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) ?&lt; 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) ?&lt; 0.57;<br>
+
 Relative error of sin function should be known;<br>
+
       <br>
- </span>Voronoi of points could be implemented using only predicates of the first type, however Voronoi of segments could not.
+ </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 Voronoi circle events. However it appears that properly used
+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.&nbsp; The main reasons for this are: 1) algorithm
-operates with integer coordinate type of input geometries; 2) closely
+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;"><br>

Modified: sandbox/gtl/doc/voronoi_robust_fpt.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_robust_fpt.htm (original)
+++ sandbox/gtl/doc/voronoi_robust_fpt.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -13,6 +13,7 @@
 
 
 
+
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Contents</title></head><body>
 
@@ -83,7 +84,7 @@
                                 <li>Layout Versus Schematic Tutorial</li>
                                 <li>Minkowski Sum Tutorial</li>
                                 <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
                         </ul>
                 </div>
                 <h3 class="navbar">Polygon Sponsor</h3>
@@ -94,26 +95,25 @@
                 <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header -->
                 <br>
                 <p></p>
- <h1>Voronoi Robust FPT</h1>
- Voronoi
-robust floating-point types are set of classes and tools that
-allow to estimate relative error of arithmetic expressions. It is
-assumed that other Boost libraries may find this unit functionality
-extremely useful. One can use them to implement robust and efficient
-arithmetic predicates or functors that compute values with known
+ <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 use d to implement robust and efficient
+arithmetic predicates or functors that compute values within known
 relative error.<br>
 
       
       <h2>Robust Fpt Type</h2>
 
-Robust
-fpt (robust floating-point type)
-- represents IEEE-754 floating-point type wrapper that also contains
-information about relative error of the underlying value. The
+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 evaluating value of the expression also computes its relative
-error. Let's consider two values A and B; C - rounding error; re
-- correspond to relative error, then following rules apply:<br>
+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) &lt;= max(re(A), re(B)) + C, if A * B &gt;= 0;</span><br style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">re(A-B) &lt;= (B * re(A) + A * re(B)) / |A - B| + C, if A * B &lt; 0;</span><br style="font-family: Courier New,Courier,monospace;">
@@ -121,36 +121,34 @@
       <span style="font-family: Courier New,Courier,monospace;">re(A/B) &lt;= 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)) &lt;= re(A) * 0.5 + C;<br>
       <br>
- </span>The constant C is equal to the rounding relative error
+ </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>
-Robust
+ <h2>Robust Difference Type</h2>The robust
 difference type -
-represents expression wrapper that holds positive and negative partial
+represents expression wrapper that holds the positive and negative partial
 sums of the expression in a separate values in order to avoid
-cancellation errors before evaluating final difference. Following
+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 about them:<br>
-1) all of the formulas evaluate upper bound of the relative error, while it could be a lot lower;<br>
-2) relative error of the expression depends on the order operations are evaluated;<br>
-3) relative error of difference of two positive numbers may be
-extremely large in case their values are close to each other (this is
-also called cancellation error).<br>
-To explain this a bit consider following expression (~ - stands for almost equal, &lt;&lt; - many times larger than):<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 executed;<br>
+3) relative error of&nbsp; 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, &lt;&lt; - many times larger than):<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">A - B + C, where A ~ B and C &lt;&lt; B;</span><br>
       <br>
-Computing relative error of this expression from left to right will produce extremely large relative error:<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 relative error value small:<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>
@@ -158,13 +156,11 @@
 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 robust fpt type, that's why
-relative error is always known for the expression result.<br>
- <h2>Robust Sqrt Expression Structure</h2>
-
-Robust square root expression structure allows to compute results of
-expression that contains square roots with predefined relative error.
-As an example consider following expression:<br>
+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 &gt; 0, a &gt;= 0, b &gt;= 0;</span><br>
       <br>
@@ -172,13 +168,12 @@
 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>
-Numerator and denominator of this expression could be computed directly as those won't lead to the cancellation errors.<br>
-In general case robust sqrt expression structure allows to evaluate following set of expressions:<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 &lt;= 4;</span><br>
       <br>
-This appears to be enough for the Voronoi.<br>
+This appears to be enough for the Boost.Polygon Voronoi.<br>
 
 
 

Modified: sandbox/gtl/doc/voronoi_utils.htm
==============================================================================
--- sandbox/gtl/doc/voronoi_utils.htm (original)
+++ sandbox/gtl/doc/voronoi_utils.htm 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -19,6 +19,7 @@
 
 
 
+
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Contents</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>
 
@@ -89,7 +90,7 @@
                                 <li>Layout Versus Schematic Tutorial</li>
                                 <li>Minkowski Sum Tutorial</li>
                                 <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
+ <li>Voronoi Advanced Tutorial</li>
                         </ul>
                 </div>
                 <h3 class="navbar">Polygon Sponsor</h3>
@@ -103,12 +104,12 @@
       <h1>Voronoi Utils</h1>Voronoi
 utilities implements a set of tools that users may find useful
 especially for
-the visualization of Voronoi diagrams or discretization of parabolic
+the visualization of the Voronoi diagrams or discretization of the parabolic
 edges. Keep in mind that there are no warranties about precision of the
-output structures produces by utils class. This is mostly because input
+output structures produces by the utilities class. This is mostly because input
 coordinate type utilities operate with
 is double. Any degeneracies may be reported, however those are of low
-priority to be fixed. Class
+priority to be fixed. The class
 declaration is following:<br>
       <br><span style="font-family: Courier New,Courier,monospace;">
 template &lt;typename T, typename TRAITS = voronoi_utils_traits&lt;T&gt; &gt;</span><br style="font-family: Courier New,Courier,monospace;"><span style="font-family: Courier New,Courier,monospace;">
@@ -127,8 +128,8 @@
 &nbsp;&nbsp;&nbsp; const bounding_rectangle&lt;CT&gt; &amp;brect,<br>
 &nbsp;&nbsp;&nbsp; fpt_type factor = 1.0)</span><br>
             </td>
- <td style="vertical-align: top;">Returns scaled bounding rectangle.<br>
-The center of transformation corresponds to the center of the input rectangle.<br>
+ <td style="vertical-align: top;">Returns the scaled bounding rectangle.<br>
+The center of the transformation corresponds to the center of the input rectangle.<br>
             </td>
           </tr>
           <tr>
@@ -138,9 +139,9 @@
 &nbsp;&nbsp;&nbsp; coordinate_type max_error,<br>
 &nbsp;&nbsp;&nbsp; point_set_type &amp;discretization)</span><span style="font-family: Courier New,Courier,monospace;"></span><span style="font-family: Courier New,Courier,monospace;"></span><br>
             </td>
- <td style="vertical-align: top;">Provides point discretization of the input voronoi edge.<br>
+ <td style="vertical-align: top;">Provides the point discretization of the input voronoi edge.<br>
 If the edge is infinite (ray, line) doesn't fill output point set.<br>
-Max error specifies maximum distance that is allowed between original parabolic arc and its approximation.<br>
+Max error specifies the maximum absolute value of the approximation.<br>
 
             </td>
           </tr>
@@ -151,8 +152,8 @@
 &nbsp;&nbsp;&nbsp; const brect_type &amp;brect,<br>
 &nbsp;&nbsp;&nbsp; point_set_type &amp;clipped_edge)</span><br>
             </td>
- <td style="vertical-align: top;">Clips the input Voronoi edges with specified rectangle.<br>
-If the edge is a parabolic arc doesn't fill output point set.<br>
+ <td style="vertical-align: top;">Clips the input Voronoi edges with the specified rectangle.<br>
+If the edge is a parabolic arc doesn't fill the output point set.<br>
             </td>
           </tr><tr>
             <td style="vertical-align: top;"><span style="font-family: Courier New,Courier,monospace;">template &lt;typename PointType&gt;</span><br style="font-family: Courier New,Courier,monospace;">
@@ -162,25 +163,24 @@
 &nbsp;&nbsp;&nbsp; const brect_type &amp;brect,<br>
 &nbsp;&nbsp;&nbsp; point_set_type &amp;clipped_edge)</span><br>
             </td>
- <td style="vertical-align: top;">Clips the input linear edge with specified rectangle.<br>
-Edge is defined by its endpoints.<br>
+ <td style="vertical-align: top;">Clips the input linear edge with the specified rectangle.<br>The edge is defined by its endpoints.<br>
             </td>
           </tr>
 
         </tbody>
- </table><h1>Bounding Rectangle</h1>The module provides implementation of a simple bounding rectangle structure with following declaration:<br>
+ </table><h1>Bounding Rectangle</h1>The module provides implementation of a simple bounding rectangle structure with the following declaration:<br>
       <br style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">template &lt;typename T&gt;</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 rectangle operates with.<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="vertical-align: top; font-family: Courier New,Courier,monospace;">bounding_rectangle()<br>
             </td>
- <td style="vertical-align: top;">Default constructor. Initializes empty bounding rectangle.<br>
+ <td style="vertical-align: top;">Default constructor. Initializes the empty bounding rectangle.<br>
             </td>
           </tr>
           <tr>
@@ -190,7 +190,7 @@
 &nbsp;&nbsp;&nbsp; coordinate_type x2,<br>
 &nbsp;&nbsp;&nbsp; coordinate_type y2)<br>
             </td>
- <td style="vertical-align: top;">Constructs bounding rectangle with given coordinates.<br>
+ <td style="vertical-align: top;">Constructs the bounding rectangle with the given coordinates.<br>
             </td>
           </tr>
           <tr>
@@ -198,14 +198,14 @@
 &nbsp;&nbsp;&nbsp; coordinate_type x,<br>
 &nbsp;&nbsp;&nbsp; coordinate_type y)<br>
             </td>
- <td style="vertical-align: top;">Extends bounding rectangle with a specified point defined by its coordinates.<br>
-If the rectangle is empty sets coordinates of the bottom left and top right corners.<br>
+ <td style="vertical-align: top;">Extends the bounding rectangle with the specified point defined by its coordinates.<br>
+If the rectangle is not initialized, initialized it with the specifed point.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">bool is_empty() const<br>
             </td>
- <td style="vertical-align: top;">Returns true if rectangle is empty (there were no updates), else false.<br>
+ <td style="vertical-align: top;">Returns true if the rectangle is empty (uninitialized), else false.<br>
             </td>
           </tr>
           <tr>
@@ -219,38 +219,38 @@
 &nbsp;&nbsp; coordinate_type x,<br>
 &nbsp;&nbsp; coordinate_type y) const<br>
             </td>
- <td style="vertical-align: top;">Returns true if rectangle contains given point defined by its coordinates, else false.<br>
+ <td style="vertical-align: top;">Returns true if the rectangle contains the given point defined by its coordinates, else false.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">coordinate_type x_min() const<br>
             </td>
- <td style="vertical-align: top;">Returns x coordinate of the bottom left corner of rectangle.<br>
+ <td style="vertical-align: top;">Returns the x coordinate of the bottom left corner of the rectangle.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">coordinate_type y_min() const<br>
             </td>
- <td style="vertical-align: top;">Returns y coordinate of the bottom left corner of rectangle.<br>
+ <td style="vertical-align: top;">Returns the y coordinate of the bottom left corner of the rectangle.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">coordinate_type x_max() const<br>
             </td>
- <td style="vertical-align: top;">Returns x coordinate of the top right corner of rectangle.<br>
+ <td style="vertical-align: top;">Returns the x coordinate of the top right corner of the rectangle.<br>
             </td>
           </tr>
           <tr>
             <td style="vertical-align: top; font-family: Courier New,Courier,monospace;">coordinate_type y_max() const<br>
             </td>
- <td style="vertical-align: top;">Returns y coordinate of the top right corner of rectangle.<br>
+ <td style="vertical-align: top;">Returns the y coordinate of the top right corner of the rectangle.<br>
             </td>
           </tr>
         </tbody>
       </table>
       <h1>Voronoi Utils Traits<br>
       </h1>
-Below is shown the default Voronoi utilities traits:<br>
+Below is shown the default Voronoi utilities traits declaration:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">template &lt;typename fpt_&gt;</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;">
@@ -270,8 +270,8 @@
       <span style="font-family: Courier New,Courier,monospace;">};<br>
       <br>
       </span>Most of the types define output geometries.
-ctype_converter_type is used to cast coordinate type of the input
-primitives to the one used by utils internally.<br>
+ctype_converter_type is used to cast the coordinate type of the input
+primitives to the one used by the utililities internally.<br>
 
 
 

Modified: sandbox/gtl/libs/polygon/example/voronoi_basic_tutorial.cpp
==============================================================================
--- sandbox/gtl/libs/polygon/example/voronoi_basic_tutorial.cpp (original)
+++ sandbox/gtl/libs/polygon/example/voronoi_basic_tutorial.cpp 2012-04-09 14:47:19 EDT (Mon, 09 Apr 2012)
@@ -24,7 +24,7 @@
   int y() const { return y_; }
 
 private:
- // Don't forget should be castable to the signed int32 type!
+ // Should be castable to the signed int32 type!
   int x_;
   int y_;
 };


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