我在 Debian 9 上开发了一个应用程序,其中{strong> boost-1.62.0 安装在{{1>命令。我发现在调用sudo apt-get install
时有一种奇怪的行为。多边形与环相交,但不与in相交。以下是代码:
boost::geometry::with_in(polygon, ring)
构建并运行:
#include <iostream>
#include <boost/geometry/algorithms/intersection.hpp>
#include <boost/version.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/ring.hpp>
#include <boost/geometry/geometries/polygon.hpp>
using namespace std;
using namespace boost;
using namespace boost::geometry;
int main()
{
using Point = boost::geometry::model::d2::point_xy<double>;
using Polygon = boost::geometry::model::polygon<Point>;
using Ring = boost::geometry::model::ring<Point>;
Ring outer;
append(outer, Point(-6.46720129179205, 15.61591992211971));
append(outer, Point(-3.617204647384145, 15.61591992211971));
append(outer, Point(-3.617204647384145, 7.615919922119708));
append(outer, Point(-6.46720129179205, 7.615919922119708));
append(outer, Point(-6.46720129179205, 15.61591992211971));
Polygon polygon;
polygon.outer() = outer;
correct(polygon);
Ring ring;
append(ring, Point(-3.542202969588097, 7.615919922119709));
append(ring, Point(-3.542202969588097, 6.81591992211971));
append(ring, Point(-3.542202969588097, 6.015919922119708));
append(ring, Point(-3.542202969588097, 5.215919922119708));
append(ring, Point(-3.542202969588097, 4.415919922119708));
append(ring, Point(-3.542202969588097, 3.615919922119708));
append(ring, Point(-3.542202969588097, 2.815919922119709));
append(ring, Point(-3.542202969588097, 2.015919922119709));
append(ring, Point(-3.542202969588097, 1.215919922119709));
append(ring, Point(-3.542202969588097, 0.4159199221197081));
append(ring, Point(-3.542202969588097, -0.3840800778802915));
append(ring, Point(-6.542202969588097, -0.3840800778802916));
append(ring, Point(-6.542202969588097, 0.415919922119708));
append(ring, Point(-6.542202969588097, 1.215919922119709));
append(ring, Point(-6.542202969588097, 2.015919922119709));
append(ring, Point(-6.542202969588097, 2.815919922119709));
append(ring, Point(-6.542202969588097, 3.615919922119708));
append(ring, Point(-6.542202969588096, 4.41591992211971));
append(ring, Point(-6.542202969588097, 5.215919922119709));
append(ring, Point(-6.542202969588097, 6.015919922119709));
append(ring, Point(-6.542202969588097, 6.815919922119708));
append(ring, Point(-6.542202969588097, 7.615919922119708));
append(ring, Point(-3.542202969588097, 7.615919922119709));
correct(ring);
cout << boolalpha
<< within(polygon, ring) << endl /* should return false */
<< covered_by(polygon, ring) << endl; /* should retrurn false */
return 0;
}
获得结果:
g++ -g -o wi wi.cpp
./wi
内部多边形 不是 ,但 true
true
返回boost::geometry::within(polygon, ring)
。
那么boost-1.62错误呢?以及如何解决它。
答案 0 :(得分:1)
差价7.615919922119709 - 7.615919922119708是1×10 ^ -15。
这意味着几何图形垂直重叠。根据标准的简单特征规范,这意味着它们满足within
: