边缘多边形的可见性

时间:2011-05-05 04:01:47

标签: visibility polygon computational-geometry

给定的是带有多边形的2D。我需要找出位于该区域内给定线段的垂直视线中可见的多边形。 e.g。

A sample example of the problem

  • 此外,

    当多边形只有垂直和水平边时,可以进行哪些优化。

1 个答案:

答案 0 :(得分:2)

我建议以下......

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