c++ - Boost.Geometry 找不到多边形线交点的第二个点

标签 c++ boost geometry boost-geometry

我正在尝试使用 Boost.Geometry 库来查找正方形和直线的交点,

model::ring<model::d2::point_xy<double>> ring { {0, 0}, {2, 0}, {2, 2}, {0, 2} };
model::polygon<model::d2::point_xy<double>> pol;
pol.inners().push_back (ring);

model::linestring<model::d2::point_xy<double>> line { {1, 3}, {-1, -1} };

model::multi_point<model::d2::point_xy<double>> out;

intersection (pol, line, out);  //out returns only {0.5, 2}, but not {0, 1}

但它只返回一个点,虽然实际上有两个交点

enter image description here

如何找到所有的交点?

最佳答案

合上你的戒指并按预期顺序放置(默认顺时针方向,see default template parameters):

model::ring<model::d2::point_xy<double>> ring {
    {0, 0}, {0, 2}, {2, 2}, {2, 0}, {0, 0}
};

您的戒指无效,即未满足指定模板参数的要求。

As per documentation (see under rules)使用无效的几何作为输入可能会产生错误的结果,并且算法既不会检查也不会纠正有效性。

环也不会在构造时或首次使用前自动关闭(它怎么知道你不会添加更多点?)。 Here是具有重复闭合点的示例构造。

但是有is_validcorrect解决这个问题。

您可能还想将点推到外环,即 pol.outer()。您的多边形需要有一个外环,内环决定孔。您可以直接构造没有内环的多边形:

model::polygon<model::d2::point_xy<double>> pol {
    { {0, 0}, {0, 2}, {2, 2}, {2, 0}, {0, 0} }
};

关于c++ - Boost.Geometry 找不到多边形线交点的第二个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39937497/

相关文章:

c++ - 如何实现 github C++ 库?

python - Boost Python Hello World 示例在 Python 中不起作用

javascript - 圆圈应该互相碰撞,但不起作用

python - 如何使用 Python 从 3-D 椭球生成点的随机样本?

C++ - 在覆盖期间调用析构函数时的类成员

c++ - 放置新+数组+对齐

c++ - 过滤 Boost 文件系统中的文件夹

c++ - 在带有转义反斜杠的 Windows 上打印 boost 路径

c++ - 对以下 c/c++ 解决方案的逻辑解释

c++ - 移动语义和结构