Этот фрагмент кода отлично работает в 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-х измерений … Программисты четко объяснили это (area.hpp):
BOOST_CONCEPT_ASSERT( (geometry::concept::AreaStrategy<Strategy>) );
assert_dimension<Ring, 2>();
Так. Да уж. Не могу использовать intersection
пересечь два плоских многоугольника. Я почти уверен, что с небольшим количеством математики вы можете сделать два прогноза, которые приведут к двум пересечениям, которые вместе дадут вам информацию, которую вы ищете.
Других решений пока нет …