Structural Bioinformatics Library
Template C++ / Python API for developping structural bioinformatics applications.

Construction of the mesh of the union of 3D balls such that any point at the surface of the union of balls has a point of the mesh in its epsilonneighborhood. More...
#include <Union_of_balls_boundary_3_side.hpp>
Public Types  
typedef T_Union_of_balls_boundary_3_side< AlphaComplex3, EXTERIOR_TAG >  Self 
typedef AlphaComplex3::Geom_traits::Kernel  Geometric_kernel 
typedef Geometric_kernel::FT  FT 
typedef Geometric_kernel::Point_3  Point_3 
Constructors  
T_Union_of_balls_boundary_3_side (const AlphaComplex3 &Ac)  
Functor  
CGAL::Sign  operator() (const Point_3 &p) const 
Construction of the mesh of the union of 3D balls such that any point at the surface of the union of balls has a point of the mesh in its epsilonneighborhood.
It is a predicate that decides if a point belongs to the interior of the boundary of the union of balls. A tag allows to modify the behaviour of the predicate, and to check that a point is in the interior or the exterior boundary of the union of balls.
It works as follows: we search the tetrahedron that contains the query point. If the tetrahedron is interior, then the query point is inside an input ball and then belongs to the interior of the union of balls.
Assume that the tetrahedron is exterior; we search the closest power vertex v to the power point (p, 0): p is inside the ball associated to v, on the boundary or outside. In the two latter cases it is out of any other ball (since v is the closest power vertex to (p, 0)). Then we can decide when p belongs to the interior of the union of balls or not.
If the tag is set to true, at the last step, we just have to check that the tetrahedron that contains the query point is connected to an infinite tetrahedron through exterior facets. This is done by using an UnionFind algorithm.

inline 
The positive side is outside, the negative side is inside.