如何查找多边形内的线段列表

时间:2017-08-29 05:52:27

标签: c++ algorithm data-structures computational-geometry

我有一条线和一个多边形。该线可以部分位于多边形内部,部分位于多边形外部。该线可以在单个点或多个点处与多边形相交。示例行如下所示

enter image description here

请参考图片。对于水平红色线我想获得线段列表。所需的输出是(A-B)(C-D)(E-F),对于垂直线,我想获得1-2的线段。

我经历了how to detemine if a line segment is inside of a polygon?以及堆栈溢出的其他问题。

但无法获得最优化的算法来获取多边形内的线段列表。

我也经历了以下链接 https://en.wikipedia.org/wiki/Bentley%E2%80%93Ottmann_algorithm但我的问题是有更多优化算法来查找多边形内的线段吗?

1 个答案:

答案 0 :(得分:0)

我在回答的情况是不允许预处理,即你有一个线段(或几个)来处理给定的多边形。多边形是通用的(可以带孔)。

旋转线条使其水平,同时旋转多边形顶点。

如果端点具有不同符号的纵坐标,则多边形的一侧与该段的支撑线相交。在这种情况下,您可以计算交叉点的位置。

多边形内的子分段由分段端点之间的有序交叉点构成。

enter image description here