最近、ブースト ポリゴンが整数のみであることを知りました:ブースト ポリゴンのユーティリティは何ですか?
浮動小数点値に大きな指数を掛けてからライブラリからの出力を再正規化することでこれを回避していますが、デフォルトでは内部表現は 32 ビットのようで、入力が最大 int を超えると機能しません20億かそこら。
ライブラリを 64 ビット整数で動作させる方法はありますか?
例: http://www.boost.org/doc/libs/1_62_0/libs/polygon/doc/tutorial/minkowski.cpp
私の素朴な変更で:
typedef boost::polygon::point_data<long long int> point;
typedef boost::polygon::polygon_set_data<long long int> polygon_set;
typedef boost::polygon::polygon_with_holes_data<long long int> polygon;
...
int main(int argc, char **argv) {
polygon_set a, b, c;
a += boost::polygon::rectangle_data<long long int>(0, 0, 10000000000, 10000000000);
std::vector<polygon> polys;
b += boost::polygon::rectangle_data<long long int>(0, 0, 10000000000, 10000000000);
polys.clear();
convolve_two_polygon_sets(c, a, b);
c.get(polys);
for(int i = 0; i < polys.size(); ++i ){
std::cout << polys[i] << std::endl;
}
return 0;
}
これは多角形を出力しますが、max int より小さい四角形のみです。入力データは long long ですが、内部的にはまだ 32 ビットであると想定しています。新しい Point 構造体を定義してそれを使用する必要があることは理解していますが、具体的にはわかりません。