如何在两个已知y值之间剪切线段?

时间:2015-04-22 16:37:05

标签: javascript algorithm geometry computational-geometry

我正在实现一种算法来为多边形找到最佳标签位置。可以找到HERE.

要点是我必须按照y值对多边形的顶点进行排序。然后,为每个y"绘制"那个点的水平线。这将多边形划分为条带,最终看起来像这样:

subdivided polygon

创建这些条带后,我必须找到每个条带中包含的所有段的中点。这是我被卡住的地方。例如,在条带#2中,最左边的段没有端点来在该条带的范围内定义它。它的端点位于条带#1的顶部和条带#3的底部。

如何将较长的线段剪切为完全包含在条带#2上限和下限的线段?

更具体地说,如何确定这两个端点(条带1的顶部,条带3的底部)是与左侧第2条相交的线的端点?

1 个答案:

答案 0 :(得分:1)

经典方法是保留一个“活动列表”,用于存储跨越当前纵坐标的边的索引。当您从纵坐标转到下一个时,边可以进入或离开列表(它们仅执行一次)。保持更新。

该列表最初为空,最终为空,并且应始终包含偶数个边。

如果多边形边缘永远不会交叉,您可以保持列表从左到右排序。