geometry - 给定一个不规则多边形的顶点列表,如何创建内部三角形来有效地构建平面 3D 网格?

标签 geometry unity3d computational-geometry polygons

我正在使用 Unity,但解决方案应该是通用的。
我将从鼠标点击中获得用户输入,它定义了一个封闭的不规则多边形的顶点列表。
该顶点将定义平面 3D 网格的外边缘。

要在 Unity 中按程序生成网格,我必须指定所有顶点以及它们如何连接以形成三角形。

所以,对于凸多边形来说,这是微不足道的,我只是制作顶点为 1,2,3 然后 1,3,4 等的三角形,形成像孔雀尾部一样的东西。

但对于凹多边形来说,就不是那么简单了。
有没有找到内部三角形的有效算法?

最佳答案

您可以使用受约束的 Delaunay triangulation (这不是很容易实现!)。良好的库实现可在 Triangle 内获得和 CGAL ,提供高效O(n*log(n))实现。

如果顶点集很小,ear-clipping算法也是一种可能性,尽管它不一定会给你一个 Delaunay 三角剖分(它通常会产生次优三角形)并在 O(n^2) 中运行.不过,实现自己很容易。

由于输入顶点存在于 3d 空间中的平面上,因此您可以通过投影到平面上,计算 2d 中的三角剖分,然后将相同的网格拓扑应用于 3d 顶点集来解决 2d 问题。

关于geometry - 给定一个不规则多边形的顶点列表,如何创建内部三角形来有效地构建平面 3D 网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369452/

相关文章:

unity3d - 有什么方法可以阻止 Visual Studio 在新函数上添加 'throw new NotImplementedException'?导致命名空间与 Unity 冲突

algorithm - Marching Squares Algorithm 的位移步骤

apache-flex - 覆盖数据提示圆

javascript - 使用 three.js 加载 OBJMTL 对象并获取 Mesh 的几何参数

c# - Unity Physics.Raycast 似乎没有正确检测到它击中的对象

c++ - 如何得到交点?光线三角形相交 C++

python - Forster-Overfelt 版本的 Greiner-Horman 多边形裁剪算法的伪代码有什么问题?

algorithm - 使用 GPS 计算距离 : How to consider accuracy differences

求解动态规划练习的算法(背包式)

unity3d - 游戏对象出现在场景 View 中但不在游戏 View 中