4

このコード スニペットは 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 ポリゴン タイプを定義する方法はありますか?

4

1 に答える 1

3

ええと。コンパイラは、呼び出されたアルゴリズムが 3 次元に対して無効であることを伝えています... プログラマーはこれを明示的に明確にしました (area.hpp):

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

そう。うん。intersection2 つの平面ポリゴンの交差には使用できません。ちょっとした数学を使えば、2 つの投影を行うことができ、それが 2 つの交点につながり、それらが合わさって求めている情報を得ることができると確信しています。

于 2014-01-23T23:41:07.923 に答える