|
CGAL 5.1 - 2D and Surface Function Interpolation
|
Given a set of sample points issued from a surface and a query point p, the functions surface_neighbors_3() compute the neighbors of p on the surface within the sample points. If the sampling is sufficiently dense, the neighbors are provably close to the point p on the surface (cf. the manual pages and [2],[5]). They are defined to be the neighbors of p in the regular triangulation dual to the power diagram which is equivalent to the intersection of the Voronoi cell of the query point p with the tangent plane to the surface at p.
The functions surface_neighbors_certified_3() also return, in addition, a Boolean value that certifies whether or not, the Voronoi cell of p can be affected by points that lie outside the input range, i.e. outside the ball centered on p passing through the furthest sample point from p in the range [first, beyond). If the sample points are collected by a k-nearest neighbor or a range search query, this permits to verify that a large enough neighborhood has been considered.
Requirements
Dt is equivalent to the class Delaunay_triangulation_3. OutputIterator::value_type is equivalent to Dt::Point_3, i.e. a point type. ITraits is equivalent to the class Voronoi_intersection_2_traits_3<K>. Implementation
These functions compute the regular triangulation of the sample points and the point p using a traits class equivalent to Voronoi_intersection_2_traits_3<K>. They determine the neighbors of p in this triangulation. The functions which certify the result need to compute, in addition, the Voronoi vertices of the cell of p in this diagram.
Functions | |
| template<class OutputIterator , class InputIterator , class Kernel > | |
| OutputIterator | CGAL::surface_neighbors_3 (InputIterator first, InputIterator beyond, const typename Kernel::Point_3 &p, const typename Kernel::Vector_3 &normal, OutputIterator out, const Kernel &K) |
The sample points \( \mathcal{P}\) are provided in the range [first, beyond). More... | |
| template<class OutputIterator , class InputIterator , class ITraits > | |
| OutputIterator | CGAL::surface_neighbors_3 (InputIterator first, InputIterator beyond, const typename ITraits::Point_2 &p, OutputIterator out, const ITraits &traits) |
| Same as above only that the traits class must be instantiated by the user. More... | |
| template<class OutputIterator , class InputIterator , class Kernel > | |
| std::pair< OutputIterator, bool > | CGAL::surface_neighbors_certified_3 (InputIterator first, InputIterator beyond, const typename Kernel::Point_3 &p, const typename Kernel::Vector_3 &normal, OutputIterator out, const Kernel &K) |
| Similar to the first function. More... | |
| template<class OutputIterator , class InputIterator , class Kernel > | |
| std::pair< OutputIterator, bool > | CGAL::surface_neighbors_certified_3 (InputIterator first, InputIterator beyond, const typename Kernel::Point_3 &p, const typename Kernel::Vector_3 &normal, const typename Kernel::FT &max_distance, OutputIterator out, const Kernel &kernel) |
Same as above except that this function takes the maximal distance from p to the points in the range [first, beyond) as additional parameter. More... | |
| template<class OutputIterator , class InputIterator , class ITraits > | |
| std::pair< OutputIterator, bool > | CGAL::surface_neighbors_certified_3 (InputIterator first, InputIterator beyond, const typename ITraits::Point_2 &p, OutputIterator out, const ITraits &traits) |
| Same as above only that the traits class must be instantiated by the user. More... | |
| template<class OutputIterator , class InputIterator , class ITraits > | |
| std::pair< OutputIterator, bool > | CGAL::surface_neighbors_certified_3 (InputIterator first, InputIterator beyond, const typename ITraits::Point_2 &p, const typename ITraits::FT &max_distance, OutputIterator out, const ITraits &traits) |
Same as above with the parameter max_distance. More... | |
| template<class Dt , class OutputIterator > | |
| OutputIterator | CGAL::surface_neighbors_3 (const Dt &dt, const typename Dt::Geom_traits::Point_3 &p, const typename Dt::Geom_traits::Vector_3 &normal, OutputIterator out, typename Dt::Cell_handle start=typename Dt::Cell_handle()) |
Computes the surface neighbor coordinates with respect to the points that are vertices of the Delaunay triangulation dt. More... | |
| template<class Dt , class OutputIterator , class ITraits > | |
| OutputIterator | CGAL::surface_neighbors_3 (const Dt &dt, const typename ITraits::Point_2 &p, OutputIterator out, const ITraits &traits, typename Dt::Cell_handle start=typename Dt::Cell_handle()) |
Same as above only that the parameter traits instantiates the geometric traits class. More... | |
| OutputIterator CGAL::surface_neighbors_3 | ( | const Dt & | dt, |
| const typename Dt::Geom_traits::Point_3 & | p, | ||
| const typename Dt::Geom_traits::Vector_3 & | normal, | ||
| OutputIterator | out, | ||
| typename Dt::Cell_handle | start = typename Dt::Cell_handle() |
||
| ) |
#include <CGAL/surface_neighbors_3.h>
Computes the surface neighbor coordinates with respect to the points that are vertices of the Delaunay triangulation dt.
The type Dt must be equivalent to Delaunay_triangulation_3<Gt, Tds>. The optional parameter start is used for the used as a starting place for the search of the conflict zone. It may be the result of the call dt.locate(p). This function instantiates the template parameter ITraits to be Voronoi_intersection_2_traits_3<Dt::Geom_traits>.
This function allows to filter some potential neighbors of the query point p from \( \mathcal{P}\) via its three-dimensional Delaunay triangulation. All surface neighbors of p are necessarily neighbors in the Delaunay triangulation of \( \mathcal{P} \cup \{p\}\).
| OutputIterator CGAL::surface_neighbors_3 | ( | const Dt & | dt, |
| const typename ITraits::Point_2 & | p, | ||
| OutputIterator | out, | ||
| const ITraits & | traits, | ||
| typename Dt::Cell_handle | start = typename Dt::Cell_handle() |
||
| ) |
#include <CGAL/surface_neighbors_3.h>
Same as above only that the parameter traits instantiates the geometric traits class.
Its type ITraits must be equivalent to Voronoi_intersection_2_traits_3<K>.
| OutputIterator CGAL::surface_neighbors_3 | ( | InputIterator | first, |
| InputIterator | beyond, | ||
| const typename ITraits::Point_2 & | p, | ||
| OutputIterator | out, | ||
| const ITraits & | traits | ||
| ) |
#include <CGAL/surface_neighbors_3.h>
Same as above only that the traits class must be instantiated by the user.
ITraits must be equivalent to Voronoi_intersection_2_traits_3<K>.
| OutputIterator CGAL::surface_neighbors_3 | ( | InputIterator | first, |
| InputIterator | beyond, | ||
| const typename Kernel::Point_3 & | p, | ||
| const typename Kernel::Vector_3 & | normal, | ||
| OutputIterator | out, | ||
| const Kernel & | K | ||
| ) |
#include <CGAL/surface_neighbors_3.h>
The sample points \( \mathcal{P}\) are provided in the range [first, beyond).
InputIterator::value_type is the point type Kernel::Point_3. The tangent plane is defined by the point p and the vector normal. The parameter K determines the kernel type that will instantiate the template parameter of Voronoi_intersection_2_traits_3<K>.
The surface neighbors of p are computed which are the neighbors of p in the regular triangulation that is dual to the intersection of the 3D Voronoi diagram of \( \mathcal{P}\) with the tangent plane. The point sequence that is computed by the function is placed starting at out. The function returns an iterator that is placed past-the-end of the resulting point sequence.
| std::pair< OutputIterator, bool > CGAL::surface_neighbors_certified_3 | ( | InputIterator | first, |
| InputIterator | beyond, | ||
| const typename ITraits::Point_2 & | p, | ||
| const typename ITraits::FT & | max_distance, | ||
| OutputIterator | out, | ||
| const ITraits & | traits | ||
| ) |
#include <CGAL/surface_neighbors_3.h>
Same as above with the parameter max_distance.
| std::pair< OutputIterator, bool > CGAL::surface_neighbors_certified_3 | ( | InputIterator | first, |
| InputIterator | beyond, | ||
| const typename ITraits::Point_2 & | p, | ||
| OutputIterator | out, | ||
| const ITraits & | traits | ||
| ) |
#include <CGAL/surface_neighbors_3.h>
Same as above only that the traits class must be instantiated by the user.
ITraits must be equivalent to Voronoi_intersection_2_traits_3<K>. There is no parameter max_distance.
| std::pair< OutputIterator, bool > CGAL::surface_neighbors_certified_3 | ( | InputIterator | first, |
| InputIterator | beyond, | ||
| const typename Kernel::Point_3 & | p, | ||
| const typename Kernel::Vector_3 & | normal, | ||
| const typename Kernel::FT & | max_distance, | ||
| OutputIterator | out, | ||
| const Kernel & | kernel | ||
| ) |
#include <CGAL/surface_neighbors_3.h>
Same as above except that this function takes the maximal distance from p to the points in the range [first, beyond) as additional parameter.
| std::pair< OutputIterator, bool > CGAL::surface_neighbors_certified_3 | ( | InputIterator | first, |
| InputIterator | beyond, | ||
| const typename Kernel::Point_3 & | p, | ||
| const typename Kernel::Vector_3 & | normal, | ||
| OutputIterator | out, | ||
| const Kernel & | K | ||
| ) |
#include <CGAL/surface_neighbors_3.h>
Similar to the first function.
The additional third return value is true if the furthest point in the range [first, beyond) is further away from p than twice the distance from p to the furthest vertex of the intersection of the Voronoi cell of p with the tangent plane defined be (p,normal). It is false otherwise.