Boost.Geometryには、2次元上の点を表現するpoint_xyコンセプトと、左上の点と右下の点のペアとして表現されるboxコンセプトがあり、この2つをwithinアルゴリズムに適用することで、四角形の内外判定が簡単にできます。
#include <iostream> #include <boost/geometry/geometry.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); if (bg::within(p, box)) { std::cout << "in" << std::endl; } else { std::cout << "out" << std::endl; } }
in
MFCなどのライブラリを使用している場合などでも、CPointやCRectをGeometryのコンセプトとしてアダプトすればwithinアルゴリズムが使えます。
#include <afx.h> #include <iostream> #include <boost/geometry/geometry.hpp> #include <boost/geometry/geometries/register/point.hpp> #include <boost/geometry/geometries/register/box.hpp> BOOST_GEOMETRY_REGISTER_POINT_2D(CPoint, LONG, cs::cartesian, x, y) BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES(CRect, CPoint, left, top, right, bottom) int main() { const CRect box(0, 0, 3, 3); const CPoint p(1, 1); if (boost::geometry::within(p, box)) { std::cout << "in" << std::endl; } else { std::cout << "out" << std::endl; } }
in
参照:
within
BOOST_GEOMETRY_REGISTER_POINT_2D
BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES