boost :: geometry 3D多边形交集编译错误

时间:2014-01-23 22:06:42

标签: c++ boost boost-geometry

此代码段在2D版本中可以正常工作,但不能在3D版本中编译:

namespace bg = boost::geometry;

typedef bg::model::point<double, 3, bg::cs::cartesian> Point3D;
typedef bg::model::polygon<Point3D>                    Poly3D;

Poly3D         p0, p1;
vector<Poly3D> result;

bg::read_wkt("POLYGON((0 0 0, 0 1 1, 1 0 0, 0 0 0))", p0);
bg::read_wkt("POLYGON((0 0 0.5, 0 11 0.5, 11 0 0.5, 0 0 0.5))", p1);

bg::intersection(p0, p1, result);

出现此模板错误:

1>C:\boost_1_54_0\boost/geometry/core/coordinate_dimension.hpp(89): error C2338: ( boost::mpl::equal_to < geometry::dimension<Geometry>, boost::mpl::int_<Dimensions> >::type::value )
...

有谁可以告诉我intersection来电有什么问题?我的应用是找到平面多边形的交集。我可以看到,一般情况下Poly3D不必是平面的,因此它可能是此错误的来源。有没有办法定义平面3D多边形类型?

1 个答案:

答案 0 :(得分:1)

呃。编译器告诉你调用的算法对3维无效......程序员明确地说明了这一点(area.hpp):

    BOOST_CONCEPT_ASSERT( (geometry::concept::AreaStrategy<Strategy>) );
    assert_dimension<Ring, 2>();

因此。是啊。无法使用intersection跨越两个平面多边形。我非常肯定通过一些数学计算你可以做两个投影,这两个投影将导致两个交叉点,它们共同为你提供你所追求的信息。