Merge pull request #6796 from janetournois/Mesh_3-compare_distance_performance_issue-jtournois

Mesh_3 speedup (filter failures in `Compare_distance_3(Point_3, Segment_3, Point_3)` )
This commit is contained in:
Laurent Rineau 2022-10-04 13:48:18 +02:00
commit 207a1e896b
1 changed files with 15 additions and 6 deletions

View File

@ -373,16 +373,23 @@ private:
if(nearest_is_a_segment) if(nearest_is_a_segment)
{ {
if(compare_distance(p, seg, nearest_segment) == CGAL::SMALLER)
{
nearest_segment = seg;
result = previous;
}
if(compare_distance(p, *it, nearest_segment) == CGAL::SMALLER) if(compare_distance(p, *it, nearest_segment) == CGAL::SMALLER)
{ {
nearest_vertex = it; nearest_vertex = it;
nearest_is_a_segment = false; nearest_is_a_segment = false;
result = it; result = it;
if (possibly(angle(*previous, *it, p) == CGAL::ACUTE) &&
compare_distance(p, seg, *nearest_vertex) == CGAL::SMALLER)
{
nearest_segment = seg;
nearest_is_a_segment = true;
result = previous;
}
}
else if(compare_distance(p, seg, nearest_segment) == CGAL::SMALLER)
{
nearest_segment = seg;
result = previous;
} }
} }
else { else {
@ -391,7 +398,9 @@ private:
nearest_vertex = it; nearest_vertex = it;
result = it; result = it;
} }
if(compare_distance(p, seg, *nearest_vertex) == CGAL::SMALLER) if ((nearest_vertex != it ||
possibly(angle(*previous, *it, p) == CGAL::ACUTE)) &&
compare_distance(p, seg, *nearest_vertex) == CGAL::SMALLER)
{ {
nearest_segment = seg; nearest_segment = seg;
nearest_is_a_segment = true; nearest_is_a_segment = true;