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

Boost.Geometry equals

C++

boost::geometry::equals()アルゴリズムは、2つのジオメトリが空間的に等しいかどうかをチェックする関数です。
形が同じでも位置が異なるとfalseを返します。
以下は、三角形からなる四角形と、四角形が等しいかどうか判定している例です:

#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/algorithms/equals.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
#include <boost/assign/list_of.hpp>

BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)

namespace bg = boost::geometry;

// poly
// ae    d
// +-----+
// | +   |
// |   + |
// +-----+
// b     c
//
// box
// (0,0)
// +-----+
// |     |
// |     |
// +-----+
//       (3,3)
int main()
{
    typedef boost::tuple<int, int> point;

    bg::model::polygon<point> poly;
    bg::exterior_ring(poly) = boost::assign::tuple_list_of(0, 0)(0, 3)(3, 3)(3, 0)(0, 0);

    const bg::model::box<point> box(point(0, 0), point(3, 3));

    const bool result = bg::equals(poly, box);
    if (result) {
        std::cout << "equal" << std::endl;
    }
    else {
        std::cout << "not equal" << std::endl;
    }
}
equal

1.47.0時点では、一部の組み合わせはまだ未実装なようです。
サポートしているジオメトリの組み合わせは以下のドキュメントを参照。


参照:
equals algorithm