distance()は、2つの図形の距離を計算するアルゴリズムです。
基本的な点と点の距離を計算するだけでなく、三角形などとの距離も計算できます。
点と点以外の距離の計算では、その図形を構成する全ての点のうち、最短距離を求めるものとなっています。
点と点の最短距離を計算:
#include <iostream> #include <boost/geometry.hpp> #include <boost/geometry/geometries/point_xy.hpp> namespace bg = boost::geometry; typedef bg::model::d2::point_xy<double> point; int main() { const point a(0, 0); const point b(3, 3); const double d = bg::distance(a, b); std::cout << d << std::endl; }
4.24264
点と三角形の距離を計算:
#include <iostream> #include <boost/geometry.hpp> #include <boost/geometry/geometries/point_xy.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/assign/list_of.hpp> namespace bg = boost::geometry; typedef bg::model::d2::point_xy<double> point; typedef bg::model::polygon<point> polygon; int main() { const point p(0, 0); polygon poly; bg::exterior_ring(poly) = boost::assign::list_of<point> (3, 3) (6, 3) (6, 6) (3, 3) ; const double d = bg::distance(p, poly); std::cout << d << std::endl; }
4.24264
distance()が最短距離を返さない場合は、図形に対してcorrect()をかけてみましょう。
たとえば、三角形が閉じてなかったりすると最短じゃない距離を返します。
参照:
distance algorithm
correct algorithm