3

処理したポリゴンデータを取得しました。ここで、処理したデータが元のデータにどの程度適合しているかを確認したいと考えています。このタスクでは、BOOST のポリゴン セット オペレーターを使用します。ただし、次のコードではセグメンテーション違反が発生します。

#include <iostream>
#include <boost/polygon/polygon.hpp>

using namespace boost::polygon::operators;
using namespace std;

typedef boost::polygon::polygon_data<double> BPolygon;
typedef boost::polygon::polygon_traits<BPolygon>::point_type BPoint;
typedef boost::polygon::polygon_set_data<double> BPolygonSet;
typedef std::vector<BPolygon> BPolygonVec;


double meassureError(BPolygonVec &polys1, BPolygonVec &polys2)
{
  BPolygonSet set1;
  BPolygonSet set2;

  assign(set1, polys1);
  assign(set2, polys2);

  return area(set1 ^ set2);
}

int main(int argc, char *argv[])
{
  BPolygonVec polys1;
  BPolygonVec polys2;

  loadPolysFromFile(polys1);
  loadPolysFromFile(polys2);

  cout << meassureError(polys1, polys2) << endl;
  return 0;
}

gdb 出力:

Program received signal SIGSEGV, Segmentation fault.
0x08156ce7 in std::list<boost::polygon::point_data<double>, std::allocator<boost::polygon::point_data<double> > >::begin (this=0x0) at /usr/include/c++/4.8.2/bits/stl_list.h:759
759           { return iterator(this->_M_impl._M_node._M_next); }

私のデータは、それぞれ約 10 個の頂点を持つ約 2000 個のポリゴンで構成されており、それを処理するのに十分なメモリがあると予想されます。私は何を間違っていますか?ご協力いただきありがとうございます!

4

1 に答える 1

5

ドキュメントから: http://www.boost.org/doc/libs/1_55_0/libs/polygon/doc/index.htm

座標データ型は、ライブラリによって提供されるすべてのデータ型とアルゴリズムのテンプレート パラメーターであり、不可欠であることが期待されます。浮動小数点座標データ型は、ライブラリに実装されているアルゴリズムではサポートされていません。これは、浮動小数点の堅牢性を実現するには、異なるアルゴリズムのセットと、一般的に浮動小数点表現に関するプラットフォーム固有の仮定が必要になるためです。

于 2013-11-19T20:20:14.110 に答える