2

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);
        }
    }
}

}

4

0 に答える 0