Boost.Geometry distance

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