mirror of https://github.com/CGAL/cgal
Fixed is_Gabriel(Vertex_handle) for P3RT3
This commit is contained in:
parent
c88044d40a
commit
6331d0f238
|
|
@ -905,8 +905,20 @@ public:
|
||||||
|
|
||||||
bool is_Gabriel(Vertex_handle v) const
|
bool is_Gabriel(Vertex_handle v) const
|
||||||
{
|
{
|
||||||
return nearest_power_vertex(
|
typename Geom_traits::Power_side_of_bounded_power_sphere_3
|
||||||
geom_traits().construct_point_3_object()(v->point()), v->cell()) == v;
|
side_of_bounded_orthogonal_sphere =
|
||||||
|
geom_traits().power_side_of_bounded_power_sphere_3_object();
|
||||||
|
|
||||||
|
const Bare_point& bp = geom_traits().construct_point_3_object()(v->point());
|
||||||
|
|
||||||
|
Vertex_handle nearest_v = nearest_power_vertex(bp, v->cell());
|
||||||
|
|
||||||
|
// Need to find the offset such that power distance v->point()
|
||||||
|
// to nearest_v->point() is minimum
|
||||||
|
Offset nearest_v_off = get_min_dist_offset_general(bp, nearest_v);
|
||||||
|
|
||||||
|
return (side_of_bounded_orthogonal_sphere(
|
||||||
|
v->point(), nearest_v->point(), Offset(), nearest_v_off) != CGAL::ON_BOUNDED_SIDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
Offset get_min_dist_offset(const Bare_point& p, const Offset & o,
|
Offset get_min_dist_offset(const Bare_point& p, const Offset & o,
|
||||||
|
|
@ -937,6 +949,36 @@ public:
|
||||||
return combine_offsets(mdo,min_off);
|
return combine_offsets(mdo,min_off);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In this version, `p` must be in the domain, and we check all possible
|
||||||
|
// offsets to find the minimum
|
||||||
|
Offset get_min_dist_offset_general(const Bare_point& p, const Vertex_handle vh) const
|
||||||
|
{
|
||||||
|
CGAL_triangulation_precondition(p.x() < domain().xmax());
|
||||||
|
CGAL_triangulation_precondition(p.y() < domain().ymax());
|
||||||
|
CGAL_triangulation_precondition(p.z() < domain().zmax());
|
||||||
|
CGAL_triangulation_precondition(p.x() >= domain().xmin());
|
||||||
|
CGAL_triangulation_precondition(p.y() >= domain().ymin());
|
||||||
|
CGAL_triangulation_precondition(p.z() >= domain().zmin());
|
||||||
|
|
||||||
|
Offset min(0, 0, 0);
|
||||||
|
|
||||||
|
for(int i=-1; i<=1; ++i) {
|
||||||
|
for(int j=-1; j<=1; ++j) {
|
||||||
|
for(int k=-1; k<=1; ++k)
|
||||||
|
{
|
||||||
|
if(i==0 && j==0 && k==0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Offset loc_off(i, j, k);
|
||||||
|
if(compare_distance(p, vh->point(), vh->point(), Offset(), min, loc_off) == LARGER)
|
||||||
|
min = loc_off;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
|
||||||
Vertex_handle nearest_vertex_in_cell(const Cell_handle& c, const Bare_point& p,
|
Vertex_handle nearest_vertex_in_cell(const Cell_handle& c, const Bare_point& p,
|
||||||
const Offset & o) const
|
const Offset & o) const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue