memgraph/poc/kdtree/math.hpp

35 lines
805 B
C++
Raw Normal View History

#pragma once
2015-06-19 16:04:42 +08:00
#include <cmath>
#include <limits>
2015-06-19 16:04:42 +08:00
#include "point.hpp"
namespace kd {
namespace math {
using byte = unsigned char;
// returns the squared distance between two points
template <class T>
T distance_sq(const Point<T>& a, const Point<T>& b) {
auto dx = a.longitude - b.longitude;
auto dy = a.latitude - b.latitude;
return dx * dx + dy * dy;
2015-06-19 16:04:42 +08:00
}
// returns the distance between two points
template <class T>
T distance(const Point<T>& a, const Point<T>& b) {
return std::sqrt(distance_sq(a, b));
2015-06-19 16:04:42 +08:00
}
// returns the distance between two points looking at a specific axis
// \param axis 0 if abscissa else 1 if ordinate
template <class T>
T axial_distance(const Point<T>& a, const Point<T>& b, byte axis) {
return axis == 0 ? a.longitude - b.longitude : a.latitude - b.latitude;
2015-06-19 16:04:42 +08:00
}
}
}