読者です 読者をやめる 読者になる 読者になる

Boost.Geometry covered_by

C++

Boost 1.48.0から、boost::geometry::covered_byアルゴリズムが追加されました。
(ただし、リリースノートには記載されていますが、アンドキュメントです。)


以前からあったwithinアルゴリズムは「境界線上ではない内側か」を判定するものでしたが、
covered_byは、「境界線上もしくは内側か」を判定するアルゴリズムです。

#include <cassert>
#include <boost/geometry/geometry.hpp>
#include <boost/geometry/algorithms/within.hpp>
#include <boost/geometry/algorithms/covered_by.hpp>

namespace bg = boost::geometry;

typedef bg::model::d2::point_xy<double> point_type;
typedef bg::model::box<point_type> box_type;

int main()
{
    const point_type top_left(0, 0);
    const point_type bottom_right(3, 3);
    const box_type   box(top_left, bottom_right);

    // 内側
    {
        const point_type p(1.5, 1.5);

        assert(bg::within(p, box));
        assert(bg::covered_by(p, box));
    }

    // 境界線上
    {
        const point_type p(3, 3);

        assert(!bg::within(p, box));
        assert(bg::covered_by(p, box));
    }
}