2

ブースト ジオメトリ ライブラリ ( Boost::geometry : ポリゴンの重心の計算) を正しく使用するのに問題があるようです。以前の質問のヘルプに非常に感謝しており、boost::geometry::within メソッドについて質問したいと思います。あるジオメトリが別のジオメトリに含まれているかどうかを答えてください。

ポイントがポリゴンに含まれているかどうかを確認するためにコードで使用していますが、ポイントが遠く離れたポリゴンの内側にあるべきではないという奇妙な結果に遭遇していますが、メソッドはTrue呼び出されたときにまだ返されます。

ポリゴンを宣言するときに欠けている微妙な点について考えています。この問題を突き止めたいと思います。コードを前後に見ていますが、これをデバッグするアイデアが不足しており、視野が狭くなっているように感じます。そのため、この特定の例についてヒントを提供したいと思います。

私のポイントは座標を持っています:221.703 , 256

ポリゴンの座標は、ポイントごとに次のとおりです。

266.158 256 266.447 256.5 267.024 256.5 267.313 257 267.024 257.5 267.313 258

上記の点を明確に含むべきではありません。

このような衒学的な質問をして申し訳ありませんが、これに鼻を入れてくれる人には本当に感謝しています

私のコード:

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

using namespace std;
namespace bg = boost::geometry;
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
typedef bg::model::box<point> box;
typedef bg::model::polygon<point, false, true> polygon;


int main(int argc, char * argv[]){
polygon pol;
pol.outer().push_back(point(266.158,256));
pol.outer().push_back(point(266.447,256.5));
pol.outer().push_back(point(267.024,256.5));
pol.outer().push_back(point(267.313,257));
pol.outer().push_back(point(267.024,257.5));
pol.outer().push_back(point(267.313,258));

double x = atof(argv[1]);
double y = atof(argv[2]);
cout << "Is inside: " << ((bg::within(point(x,y),pol)) ? "yes" : "no") << endl;
return 0;
}
4

1 に答える 1