对 x 单调多边形进行三角剖分

Triangulating a x-monotone polygon

我无法弄清楚如何对 x 单调多边形进行三角剖分。我正在引用 this article。我不明白如何检查顶点是否是耳朵以及是否有对角线。

参见第 13/25 页,"Triangulation: Theory"。该图说明了一个测试,看看 p 是否是耳朵上的顶点。它的邻居是 q 和 r。如果线段 qr 是对角线,则 p 在耳朵上。

您可以通过测试线段上是否有任何其他顶点或是否有任何其他边线段与它交叉来测试线段是否为对角线。

你指的是ear cutting是n^2次的算法。有许多简单的算法可以对简单的多边形进行三角剖分。最简单的 n log n 时间算法之一包括首先将简单的多边形分割成单调的片段,然后对这些片段进行三角剖分。这种情况下的拆分需要 n log n。在你的情况下,因为你已经有了单调片,你可以在线性时间内轻松地对 x 单调多边形进行三角测量。

本书 Computational Geometry.

中给出了这个简单算法的很好的解释。

大致意思是:你知道你的多边形是 x 单调的。因此,您将它分成两个单调链(上链和下链)。现在您可以沿着两条链行走并在两条链之间插入对角线,而无需检查可见性。只要下一个下链顶点的 x 值较小,就沿着上链前进。如果你的顶点是反射的,你把它放在一个堆栈上,否则你在另一边插入一条对角线。当您在另一条链上进行下一步时,首先将对角线插入堆栈中的每个顶点,然后继续执行此例程。