如何找到多边形内矢量的最长距离?

时间:2014-08-27 22:39:50

标签: c algorithm geometry computational-geometry

给定方向向量和任意多边形(可以是非凸的),找到沿多边形限定的向量的最长直线的有效算法是什么?

注意:与上述问题有些相关的原始问题是:给定一个三角形,找到给定多边形内最大的有界相似三角形。

1 个答案:

答案 0 :(得分:1)

这是第一个问题的O(n log n)时间扫描线算法("原始"看起来更难)。

假设不失一般性,即向量是(1,0)。假设没有退化(这对我来说有点琐碎)。对于多边形的每个边缘,创建一个" start"具有较小y坐标的顶点的事件和"停止"具有更大的顶点的事件。按y坐标对事件进行排序,并将它们从最小到最大处理。对于开始事件,将边插入由边与当前扫描线的交点的x坐标键控的有序集。对于停止事件,请删除边缘。在对集合进行操作之前和之后,检查在插入/删除点处连接两条边的扫描线段是否长于目前为止发现的最长段。 (通过相对于多边形以逆时针方向移动的这两条边是y增大还是y减小,可以判断该线段是否在多边形内部。)