Boost.Geometryで3次元を扱うサンプル

これまで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で確認。