使用 boost 库中的 intersection() 函数时遇到以下错误。
我有一个多边形向量,我想得到每个多边形与正方形的交集 (((300, -90), (300, 90), (500, 90), (500, -90), (300, -90)))。
在这些多边形中有一个多边形 (((300, 90), (273.338, 31.7382), (208.263, 6.01099), (188.95, 12.8509), (161.473, 90), (300, 90))),
当我在下面的循环中计算结果时,这个多边形的结果是错误的。输出为 (((300, 90), (300, 90), (500, 90), (500, -90), (300, -90), (300, 90)))。但是,如果我不使用循环而只测试这个多边形,则交集是空的,结果是我所期望的。
这很奇怪。有人可以知道是什么原因吗?
double Analysis::GetDensity(const vector<polygon_2d>& polygon, const polygon_2d& measureArea)
{
double density=0;
for(vector<polygon_2d>::const_iterator polygon_iterator = polygon.begin(); polygon_iterator!=polygon.end();polygon_iterator++)
{
typedef std::vector<polygon_2d > polygon_list;
polygon_list v;
intersection(measureArea, *polygon_iterator, v);
if(!v.empty())
{
density+=area(v[0])/area(*polygon_iterator);
if((area(v[0])/area(*polygon_iterator))>1.00001)
{
std::cout<<dsv(v[0])<<"\n";
std::cout<<dsv(measureArea)<<"\n";
std::cout<<dsv(*polygon_iterator)<<"\n";
std::cout<<"this is a wrong result "<<area(v[0])<<'\t'<<area(*polygon_iterator)<<"\n";
exit(EXIT_FAILURE);
}
}
}
}