2020#define CGAL_DISTANCE_2_POINT_2_SEGMENT_2_H
2121
2222#include < CGAL/Distance_2/internal/squared_distance_utils_2.h>
23- #include < CGAL/Distance_2/Point_2_Point_2.h>
24- #include < CGAL/Distance_2/Point_2_Line_2.h>
2523
2624#include < CGAL/Point_2.h>
2725#include < CGAL/Segment_2.h>
@@ -57,11 +55,15 @@ squared_distance_indexed(const typename K::Point_2 &pt,
5755 int ind,
5856 const K& k)
5957{
58+ typename K::Compute_squared_distance_2 sq_dist = k.compute_squared_distance_2_object ();
59+
6060 if (ind == 0 )
61- return internal::squared_distance (pt, seg.source (), k);
61+ return sq_dist (pt, seg.source ());
62+
6263 if (ind == 1 )
63- return internal::squared_distance (pt, seg.target (), k);
64- return internal::squared_distance (pt, seg.supporting_line (), k);
64+ return sq_dist (pt, seg.target ());
65+
66+ return sq_dist (pt, seg.supporting_line ());
6567}
6668
6769template <class K >
@@ -73,21 +75,23 @@ squared_distance(const typename K::Point_2& pt,
7375 typedef typename K::Vector_2 Vector_2;
7476 typedef typename K::RT RT;
7577
76- typename K::Construct_vector_2 construct_vector = k.construct_vector_2_object ();
78+ typename K::Construct_vector_2 vector = k.construct_vector_2_object ();
79+ typename K::Compute_squared_length_2 sq_length = k.compute_squared_length_2_object ();
80+ typename K::Compute_squared_distance_2 sq_dist = k.compute_squared_distance_2_object ();
7781
7882 // assert that the segment is valid (non zero length).
79- Vector_2 diff = construct_vector (seg.source (), pt);
80- Vector_2 segvec = construct_vector (seg.source (), seg.target ());
83+ const Vector_2 diff = vector (seg.source (), pt);
84+ const Vector_2 segvec = vector (seg.source (), seg.target ());
8185
82- RT d = wdot (diff, segvec, k);
86+ const RT d = wdot (diff, segvec, k);
8387 if (d <= RT (0 ))
84- return k. compute_squared_length_2_object () (diff);
88+ return sq_length (diff);
8589
86- RT e = wdot (segvec,segvec, k);
90+ const RT e = wdot (segvec,segvec, k);
8791 if (wmult ((K*)0 ,d, segvec.hw ()) > wmult ((K*)0 , e, diff.hw ()))
88- return internal::squared_distance (pt, seg.target (), k );
92+ return sq_dist (pt, seg.target ());
8993
90- return internal::squared_distance (pt, seg.supporting_line (), k );
94+ return sq_dist (pt, seg.supporting_line ());
9195}
9296
9397template <class K >
@@ -106,15 +110,15 @@ inline typename K::FT
106110squared_distance (const Point_2<K>& pt,
107111 const Segment_2<K>& seg)
108112{
109- return internal::squared_distance ( pt, seg, K () );
113+ return K (). compute_squared_distance_2_object ()( pt, seg);
110114}
111115
112116template <class K >
113117inline typename K::FT
114118squared_distance (const Segment_2<K>& seg,
115119 const Point_2<K>& pt)
116120{
117- return internal::squared_distance (pt, seg, K () );
121+ return K (). compute_squared_distance_2_object ()( seg, pt );
118122}
119123
120124} // namespace CGAL
0 commit comments