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

标签 javascript algorithm geometry computational-geometry

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

要点是我必须根据它们的 y 值对多边形的顶点进行排序。然后,为每个 y 在该点“绘制”一条水平线。这将多边形分成 strip ,最终看起来像这样:

subdivided polygon

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

如何将较长的线段剪裁成完全包含在 strip #2 的上下边界中的线段?

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

最佳答案

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

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

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

关于javascript - 如何在两个已知 y 值之间剪裁线段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29803819/

相关文章:

c - 从随机维度数组中查找值的索引

java - OpenCV HoughCircles 未检测到圆圈

algorithm - 从哪里获得用于将 RGB 平行四边形投影到 RGB 三角形的伪代码算法

php - 通过两个页面将 URL 传递给 iFrame

algorithm - 在图中选择最佳可能的初始位置以最大化潜在邻居

javascript - DOM属性改变调试

algorithm - 计算 0..n 范围内的哈希函数

wpf - 增加StrokeThickness,但保持Path的尺寸

javascript - 使用基于 Prop 更新的状态来 react useState

javascript - 检查索引之一中的字段之一是否为空