Boost :: геометрия 3D ошибки пересечения полигонов пересечения

Этот фрагмент кода отлично работает в 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 не обязательно должен быть плоским, поэтому может быть источником этой ошибки. Есть ли способ определить тип плоского трехмерного многоугольника?

3

Решение

Эмм. Компилятор говорит вам, что вызванный алгоритм недопустим для 3-х измерений … Программисты четко объяснили это (area.hpp):

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

Так. Да уж. Не могу использовать intersection пересечь два плоских многоугольника. Я почти уверен, что с небольшим количеством математики вы можете сделать два прогноза, которые приведут к двум пересечениям, которые вместе дадут вам информацию, которую вы ищете.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector