boost geometry库中的within和covered_by函数返回了错误的结果,这是怎么回事?

新手上路,请多包涵
BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(SLDPoint, double, bg::cs::cartesian, _GetX, _GetY, _SetX, _SetY)
BOOST_GEOMETRY_REGISTER_RING(vector<SLDPoint>)

bool check_covered = bg::covered_by(LineNodes[i]->_GetLine()->_GetPoints(), LineNodes[j]->_GetLine()->_GetPoints());
cout<<check_covered<<endl;

我为covered_by函数传入了两个SLDPoint的数组。
其中第一个数组中的点为:

Point:(0.00000,-0.00000)
Point:(15000.00020,-0.00000)
Point:(15000.00020,1450.00000)
Point:(0.00000,1450.00000)

第二个数组中的点为:

Point:(4174.83730,1450.02250)
Point:(4185.07960,1450.02250)
Point:(4258.50230,1450.02250)
Point:(4331.92240,1450.02250)
Point:(4342.16730,1450.02250)
Point:(4342.16730,1440.02500)
Point:(4342.16730,1430.02500)
Point:(4342.16730,1420.02500)
Point:(4342.16730,1410.02500)
Point:(4331.92240,1410.02500)
Point:(4258.50230,1410.02500)
Point:(4185.07960,1410.02500)
Point:(4174.83730,1410.02500)
Point:(4174.83730,1420.02500)
Point:(4174.83730,1430.02500)
Point:(4174.83730,1440.02500)

结果check_covered的值居然是true,也就是说第一个图形在第二个图形里面??

图中有更直观的展示。整个这个大的矩形就是我输入的第1个数组所形成的封闭图形。而在它的上方有个非常非常小的矩形就是我输入的第2个数组所形成的封闭图形。这结果是不是不太对?我确定我没有弄反,其余几百个图形都判断正确,唯独这两个有问题。covered_by换成within也获得一样的结果,而且应该也不是浮点数精度的问题,我把它乘以10000并转换成int型还是得到一样的结果。

阅读 2.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏