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

How do I clip a line segment between two known y values?

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

要点是我必须根据 y 值对多边形的顶点进行排序。然后,对于每个 y "draw" 点的水平线。这将多边形分成条带,最终看起来像这样:

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

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

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

经典方法是保留一个 "active list" 来存储跨当前坐标的边的索引。当您从一个纵坐标转到下一个纵坐标时,边可以进入或离开列表(它们只会这样做一次)。保持更新。

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

如果多边形的边从不交叉,您可以保持列表从左到右的顺序。