如何对不规则形状的格子进行三角剖分?

How do I triangulate an irregularly shaped lattice?

我有一个 XYZ 点列表,这些点在 XY 平面中均匀排列 spaced 格子,如下所示(例如):

我想 'tile' 这些点之间的 space 用三角形将一个点连接到它的两个直接(最多)八个相邻点,如下所示:

如何在 Python 中高效地执行此操作? 一种天真的方法会检查每个点是否有八个可能的三角形,但由于考虑了很多重复的三角形,这种方法效率非常低。做一些事情,比如考虑每个点右下角的可能三角形,会错过一些三角形。这个问题有一些通用的算法吗?

我认为 Delaunay 三角剖分不合适,因为它总是会产生凸三角剖分。




上下文

此三角测量是从激光雷达高度数据生成建筑物 3D 网格过程中的一个步骤。当我使用 'usual' 算法从点云(泊松、旋转球)生成网格时,我最终得到的网格中有许多孔(尤其是在陡峭的斜坡上,如塔或墙)。我希望我可以通过认识到点云在 XY 平面中形成一个均匀的 spaced 晶格并如上所述从该角度对其进行三角剖分来解决很多这些孔洞问题。

考虑每个 2x2 子网格,其中至少存在三个点 abcd

a b

d c

要获得与您描述的一样的三角剖分,请测试是否只有三个点。如果是这样,请放置一个由这三个点组成的三角形。否则,将三角形 abcacd.