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

Boost.Geometry overlaps

C++

overlaps()アルゴリズムは、2つのジオメトリが重なっているかどうかを判定する関数です。
disjoint()の逆と考えていいと思いますが、overlaps()はboxに最適化された実装になっていて、1.47.0時点ではboxしか使えないようです。

#include <boost/assert.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/box.hpp>

namespace bg = boost::geometry;

int main()
{
    typedef bg::model::d2::point_xy<double> point;
    typedef bg::model::box<point> box;

    // overlap
    // a
    // +------+
    // |   b  |
    // |   +--+---+
    // +---+--+   |
    //     |      |
    //     +------+
    {
        const box a(point(0, 0), point(3, 3));
        const box b(point(2, 2), point(5, 5));

        const bool result = bg::overlaps(a, b);
        BOOST_ASSERT(result);
    }
    // not overlap
    // a
    // +------+
    // |      |
    // |      |
    // +------+  b
    //           +------+
    //           |      |
    //           |      |
    //           +------+
    {
        const box a(point(0, 0), point(3, 3));
        const box b(point(4, 4), point(7, 7));

        const bool result = boost::overlaps(a, b);
        BOOST_ASSERT(!result);
    }
}

参照:
overlaps algorithm