2011-05-05 65 views
2

给出的是具有多边形的2D。我需要找出位于该区域内的给定线段的垂直视线中可见的多边形。例如从边缘看多边形的可见性

A sample example of the problem

  • 此外,

    什么可以是优化时的多边形仅具有垂直和水平边缘。

+0

是线段往往不是一路所有多边形的左边(或他们的权利)?或者这些细分还可以位于多边形的中间? – 2011-05-07 09:22:21

+0

他们可以在中间。在这种情况下,该多边形应作为单独的结果报告。 – Xolve 2011-05-07 13:21:50

回答

2

我建议以下...

  • 旋转的问题,所以你的段“视线”对齐于x轴。
  • 找到每个多边形的(轴对齐)边界矩形(BR)。
  • 使用每个BR的底部边缘的Y坐标对多边形排序
  • 创建一个限幅“范围缓冲区”来标记将不再可见的观看段的各个部分。
  • 对于排序列表中的每个多边形C(电流)做...
    1. 按C的左右边界作为其初始剪辑范围。
    2. 修剪C的裁剪范围,范围已经标记为“范围缓冲区”中的裁剪范围。
    3. 现在对于一个类似的深度的每个随后的多边形S(即其中,S的BR底部边缘开始低于C的BR顶边)...
      • 循环到下一个S,如果它不水平以C重叠
      • 确定S是否从左边或右边重叠(例如通过比较S和C的BR水平中点)。如果S与右侧重叠且S的最左侧顶点低于C的最右侧顶点,则相应地截断C的裁剪范围。 (同样,如果S与左侧重叠)
    4. 如果残差剪切范围不为空,则至少部分C在您的观看段中可见。现在将C的残差剪切范围添加到剪辑'范围缓冲区'中。
+0

谢谢安格斯,这是我非常想找的东西。 – Xolve 2011-05-08 05:52:36

+1

我还应该提到上面的算法只能安全地处理凸多边形。在应用算法之前,凹面多边形必须分割成凸多边形。 – 2011-05-08 06:29:51

+0

感谢您指出:) – Xolve 2011-05-09 05:16:25