これまで2次元を扱うサンプルしか紹介してこなかったので、3次元の例も書いておきます。
2次元では点を表現するのにpoint_xyを使っていましたが、3次元以上の場合にはpoint型を使用します。
以下は、3次元のポリゴン同士の交差判定です。
#include <cassert> #include <boost/geometry.hpp> #include <boost/geometry/geometries/linestring.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/assign/list_of.hpp> namespace bg = boost::geometry; typedef bg::model::point<double, 3, bg::cs::cartesian> point; typedef bg::model::polygon<point> polygon; int main() { polygon a, b; bg::exterior_ring(a) = boost::assign::list_of<point> (-1.5, 0.0, -1.5) (-1.5, 3.0, -1.5) ( 1.5, 3.0, 1.5) ( 1.5, 0.0, 1.5) (-1.5, 0.0, -1.5) ; bg::exterior_ring(b) = boost::assign::list_of<point> (0, 0, 0) (0, 3, 0) (3, 3, 0) (3, 0, 0) (0, 0, 0) ; const bool result = bg::intersects(a, b); assert(result); }
動いているみたいです。
Boost 1.48.0で確認。