天真可见度图;相交的线段

时间:2019-01-16 17:20:34

标签: geometry graph-theory computational-geometry

我正在寻求实现朴素的可见性图算法(即O(n ^ 3)运行时),但是遇到了一些问题。我的方法如下:

  • 给出:多边形数组(由[x,y]顶点数组表示)
  • 创建多边形中所有边的附加数组
  • 将多边形数组“平展”为仅包含顶点的数组
  • 遍历所有可能的唯一顶点对(v1,v2)
    • 环绕所有边缘
    • 视线=真
    • 如果从v1到v2的线段穿过边缘相交/交叉,则视线=假
    • 如果视线= true,则存在从v1到v2的可见路径(即v1可以“看到” v2)

要检查两个部分是否交叉,我实现了此处概述的算法:https://martin-thoma.com/how-to-check-if-two-line-segments-intersect/

我有两个主要问题:

  1. 顶点n应该连接到n + 1和n-1。但是,此算法可防止这种情况的发生,因为它认为边n与边n + 1相交,因为它们共享一个公共顶点: Image 1
  2. 如果我更改算法以仅防止相互交叉的边(即没有共享顶点的共线点/边的边),则它认为穿过多边形的线是有效的: enter image description here

关于如何调整我的方法以根据一组不相交的顶点计算可见性图的任何建议?检查多边形是否穿过多边形而不是交叉边缘会更好吗?

注意:我正在寻求实现幼稚的可见性图;我知道有一种O(n ^ 2 log(n))方法更常用,但我正在寻找简单方法。

0 个答案:

没有答案
相关问题