如何在特定方向(CCW / CW)有效地排序顶点或对形成表面凸包的一组点进行三角测量?

时间:2018-02-19 11:13:22

标签: geometry triangulation

我试图使用一种非常简单的方法对一组点进行三角测量,其中选择基本顶点,然后将每个其他顶点连接到其相邻顶点然后返回到基本顶点,以创建三角形扇形结构,它创造了一个坚实的表面。

enter image description here

这种方法的问题在于,为了对其进行三角测量,存在大量迭代,并且对于每个三角测量点,它必须再次遍历整个列表以找到其最近的CW点,这是非常慢的,但是有效。

    for (int i = 1; i < triangulationPoints.Count; i++)
        {
//this method iterates over available which is a copy of triangulationPoints
//and finds the closest vertex with no backtracking
            Vector3 vertex = findClosestVertex(currentVertex, available, ordered);
//...
available.Remove(vertex);
        }

现在我正在寻求加速算法,以便获得相同的效果,但速度更快。

我实现了一个二进制插入函数,它根据与基本顶点的距离对每个点进行排序,因为它插入到triangulationPoint列表中,该列表运行良好且速度很快,但由于没有考虑到下一个CW顶点,但任何顶点。

enter image description here

有没有人对如何加快速度提出任何建议,或者可能是另一种相对容易实现的三角测量算法,可以实现快速的速度?

修改 我尝试过Unity的三角测量,产生的结果比我的尝试更糟糕。我也尝试过第三方三角测量器(https://github.com/CiaccoDavide/Unity-UI-Polygon),这似乎正是我所需要的,但它只是在用户界面上而不是在世界空间中。

0 个答案:

没有答案
相关问题