Let be a set of weighted points in . Let and be two weighted points. A weighted point can also be seen as a sphere of center and radius . The power product between and is defined as
where is the Euclidean distance between and . and are said to be orthogonal if (see Figure ).
Figure: Orthogonal weighted points (picture in 2D)
Four weighted points have a unique common orthogonal weighted point called the power sphere. A sphere is said to be regular if .
A triangulation of is regular if the power spheres of all simplices are regular.
The regular triangulation of is in fact the projection onto of the convex hull of the four-dimensional points for . Note that all points of do not necessarily appear as vertices of the regular triangulation. To know more about regular triangulations, see for example [ES96].
When all weights are 0, power spheres are nothing more than circumscribing spheres, and the regular triangulation is exactly the Delaunay triangulation.
We will call the weighted point orthogonal to three weighted points in the plane defined by these three points the power circle. The power segment will denote the weighted point orthogonal to two weighted points on the line defined by these two points.
To simplify notation, will often denote in the sequel either the point or the weighted point .
#include <CGAL/Regular_triangulation_3.h>
Inherits the types of Triangulation_3<Traits,Tds>.
| ||
| The type for points p of weighted points | |
| ||
|
| |
Creates an empty regular triangulation.
| |
| |
Creates an empty regular triangulation with traits class
traits.
| |
| |
Copy constructor.
|
The following methods, which already exist in triangulations, are overloaded to ensure the property that all power spheres are regular.
|
| |
Inserts weighted point p in the triangulation. If this insertion creates a vertex, this vertex is returned. Otherwise, this method returns NULL. | ||
|
| |
Same as the previous method, start is used as a starting place for the search done within the insertion. |
The following method allows one to insert several points. It returns the number of inserted points.
| ||
|
| |
Inserts the points in the range first,
last. Precondition: The value_type of first and last is Point. |
Let us remark that
is equivalent to
|
| |||
Returns the position of the weighted point with respect to the
power sphere of c. More precisely, it returns: - ON_BOUNDED_SIDE if where is the power sphere of c. For an infinite cell this means either that p lies strictly in the half space limited by its finite facet and not containing any other point of the triangulation, or that the angle between p and the power circle of the finite facet of c is greater than . - ON_BOUNDARY if p is orthogonal to the power sphere of c i.e. . For an infinite cell this means that p is orthogonal to the power circle of its finite facet. - ON_UNBOUNDED_SIDE if i.e. the angle between the weighted point p and the power sphere of c is less than or if these two spheres do not intersect. For an infinite cell this means that p does not satisfy either of the two previous conditions. Precondition: rt.dimension() . | ||||
|
| |||
Returns the position of the point p with respect to the
power circle of f. More precisely, it returns: - in dimension 3: - For a finite facet, ON_BOUNDARY if p is orthogonal to the power circle in the plane of the facet, ON_UNBOUNDED_SIDE when their angle is less than , ON_BOUNDED_SIDE when it is greater than (see Figure ). - For an infinite facet, it considers the plane defined by the finite facet of the cell f.first, and does the same as in dimension 2 in this plane. - in dimension 2: - For a finite facet, ON_BOUNDARY if p is orthogonal to the circle, ON_UNBOUNDED_SIDE when the angle between p and the power circle of f is less than , ON_BOUNDED_SIDE when it is greater than . - For an infinite facet, ON_BOUNDED_SIDE for a point in the open half plane defined by f and not containing any other point of the triangulation, ON_UNBOUNDED_SIDE in the other open half plane. If the point p is collinear with the finite edge e of f, it returns: ON_BOUNDED_SIDE if , where is the power segment of e in the line supporting e, ON_BOUNDARY if , ON_UNBOUNDED_SIDE if . Precondition: rt.dimension() . | ||||
|
| |||
Same as the previous method for facet i of cell c. | ||||
|
| |||
In dimension 1, returns ON_BOUNDED_SIDE if , where is the power segment of the edge represented by c, ON_BOUNDARY if , ON_UNBOUNDED_SIDE if . Precondition: rt.dimension() . |