mirror of https://github.com/CGAL/cgal
46 lines
1.6 KiB
C++
46 lines
1.6 KiB
C++
struct Distance {
|
|
typedef Point Query_item;
|
|
|
|
double transformed_distance(const Point& p1, const Point& p2) const {
|
|
double distx= p1.x()-p2.x();
|
|
double disty= p1.y()-p2.y();
|
|
return distx*distx+disty*disty;
|
|
}
|
|
|
|
template <class TreeTraits>
|
|
double min_distance_to_rectangle(const Point& p,
|
|
const CGAL::Kd_tree_rectangle<TreeTraits>& b) const {
|
|
double distance(0.0), h = p.x();
|
|
if (h < b.min_coord(0)) distance += (b.min_coord(0)-h)*(b.min_coord(0)-h);
|
|
if (h > b.max_coord(0)) distance += (h-b.max_coord(0))*(h-b.max_coord(0));
|
|
h=p.y();
|
|
if (h < b.min_coord(1)) distance += (b.min_coord(1)-h)*(b.min_coord(1)-h);
|
|
if (h > b.max_coord(1)) distance += (h-b.max_coord(1))*(h-b.min_coord(1));
|
|
return distance;
|
|
}
|
|
|
|
template <class TreeTraits>
|
|
double max_distance_to_rectangle(const Point& p,
|
|
const CGAL::Kd_tree_rectangle<TreeTraits>& b) const {
|
|
double h = p.x();
|
|
|
|
double d0 = (h >= (b.min_coord(0)+b.max_coord(0))/2.0) ?
|
|
(h-b.min_coord(0))*(h-b.min_coord(0)) : (b.max_coord(0)-h)*(b.max_coord(0)-h);
|
|
|
|
h=p.y();
|
|
double d1 = (h >= (b.min_coord(1)+b.max_coord(1))/2.0) ?
|
|
(h-b.min_coord(1))*(h-b.min_coord(1)) : (b.max_coord(1)-h)*(b.max_coord(1)-h);
|
|
return d0 + d1;
|
|
}
|
|
|
|
double new_distance(double& dist, double old_off, double new_off,
|
|
int /* cutting_dimension */) const {
|
|
return dist + new_off*new_off - old_off*old_off;
|
|
}
|
|
|
|
double transformed_distance(double d) const { return d*d; }
|
|
|
|
double inverse_of_transformed_distance(double d) { return std::sqrt(d); }
|
|
|
|
}; // end of struct Distance
|