boostorg / polygon

Boost.org polygon module
http://boost.org/libs/polygon
55 stars 70 forks source link

The result of polygon_90_set_data::get with argument vthreshold is incorrect #84

Open xshenf opened 1 year ago

xshenf commented 1 year ago

The code is as follows:

#include "boost/polygon/gtl.hpp"
#include <vector>
#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    gtl::point_data<int> point[] = {{53, 17}, {53, 68}, {33, 68}, {33, 17}};
    gtl::polygon_90_data<int> p90;
    p90.set(point, point + 5);
    gtl::rectangle_data<int> r1 = {10, 20, 30, 40};
    gtl::rectangle_data<int> r2 = {10, 25, 35, 45};
    gtl::rectangle_data<int> r3 = {10, 55, 43, 62};
    gtl::polygon_90_set_data<int> ps1(gtl::VERTICAL), ps2(gtl::VERTICAL);
    ps1.insert(r1);
    ps1.insert(r3);
    ps2.insert(r2);
    ps2.insert(p90);

    gtl::polygon_90_set_data<int> ps3 = ps1 | ps2;    
    vector<gtl::polygon_90_data<int>> p90s;
    ps3.get(p90s, 8);
    for (auto& p : p90s) {
        for (auto& x : p) {
          cout << "(" << x.x() << " " << x.y() << ")";
        }
        cout << endl;
    }

    return 0;
}

The result is:

(17 33)(25 33)(25 30)(20 30)(20 10)(45 10)(17 10)
(53 17)(33 17)(33 55)(10 55)(10 62)(33 62)(33 68)(53 68)

The input 17(point{53,17}) is the vertical coordinate, and the output 17(point{17,33}) is the horizontal coordinate.