added Construct_projected_point_2(Segment_2, Point_2)

This commit is contained in:
Sven Oesau
2024-03-05 15:54:27 +01:00
parent 56ac3a5c31
commit 911ac1a34d
2 changed files with 32 additions and 4 deletions
@@ -3295,9 +3295,28 @@ namespace CartesianKernelFunctors {
Point_2
operator()( const Segment_2& s, const Point_2& p ) const
{
assert(false);
return p;
// CommonKernelFunctors::Construct_projected_point_3<K>()(s,p,K());
const Point_2& a = s.source();
const Point_2& b = s.target();
typename K::FT dx = b.x() - a.x();
typename K::FT dy = b.y() - a.y();
// Degenerate segment
if (dx == 0 && dy == 0)
return a;
typename K::FT px = p.x() - a.x();
typename K::FT py = p.y() - a.y();
typename K::FT proj = (dx * px + dy * py) / (dx * dx + dy * dy);
if (proj <= 0.0)
return a;
if (proj >= 1.0)
return b;
typename K::Construct_point_2 construct_point_2;
return construct_point_2(a.x() + proj * dx, a.y() + proj * dy);
}
Point_2