旋转线扫描 - 排序边缘

时间:2018-02-03 02:39:53

标签: java sorting graph polygon computational-geometry

我正在尝试实施 Lee的公开图

可能有n个多边形,其中多边形的每一边都是边。假设存在点p1,并且平行于正x轴的半衬里从p1开始。我需要找到与r相交的边,并按排序顺序存储它们。

首先由线r相交的边缘具有更高的优先级,并且更接近的边缘具有更高的优先级,但是当看到>时,优先级更高。距离。

  

E.g p1 =(0,1),以及具有以下顶点的多边形{(2,   4),(3,6),(5,20)}。此多边形的边应排序为   [((2,4),(5,20)),((2,4),(3,6)),((3,6),(5,20))]。

因此,如何对这些边缘进行排序

(如果你转到链接阅读,我想你会有更好的想法,对不起我的解释)。

我的主要想法:按距离和天使从p1到r遇到的边缘的第一个顶点对它们进行排序。虽然,所有顶点都有多个边(因为每个顶点/边是多边形的一部分),但我不知道如何对这两个顶点进行排序。

非常感谢任何想法或提示。

只是一些参考https://taipanrex.github.io/2016/10/19/Distance-Tables-Part-2-Lees-Visibility-Graph-Algorithm.html 和一本书:计算几何算法和应用程序。

1 个答案:

答案 0 :(得分:0)

我为那些感兴趣的人找到了一条路:

扫描线逆时针旋转,其排序边缘基于在遇到该边缘的第一个顶点时进行测量,即:半线初始位置之间的角度(当它平行于正x轴)​​和遇到的顶点,p1和遇到的顶点之间的距离。角度和距离越小越好,角度也优先于距离。

我也进行了第3次测量,因为半线旋转,当它到达顶点时它应该与它相交,因此我采用半线和顶点边缘之间的角度。角度越大,这个角度的优先级越高,因为它意味着边缘越近。该角度用于区分半线具有相同的第一个遇到的顶点的边缘。因此,此测量的优先级最低。

希望这会对某人有所帮助。