三角化任意4顶点多边形

时间:2010-10-02 05:26:30

标签: split geometry

这是你的谜语。你有一个由4个顶点组成的多边形,称它们为v1,v2,v3,v4。它们以任意随机顺序给出。你如何将这些顶点分成两组,每组都定义一个三角形,这样两个三角形就构成了多边形而没有重叠。

结果应如下所示:

三角形1:v1,v2,v3 三角形2:v2,v3,v4

......诀窍是,三角形不能重叠,这些点以任何顺序给出,没有任何x,y坐标的指示。这甚至可能吗?如果没有,请建议最好的方法来三角化其坐标已知的4点多边形。我正在寻找一个有效的循环。

4 个答案:

答案 0 :(得分:1)

您需要将其分解为两个步骤:

1)将顶点按顺时针顺序排序。请参阅this question and its answers

2)找到四边形内的对角线(如果四边形是凹的,那么其中只有一个会在里面。如果是凸的,两者都是)。请参阅this question and its answers

一旦你得到了它,就应该很明显如何找到这两个三角形。

答案 1 :(得分:0)

如果你不知道坐标,那是不可能的。

对于第一个三角形,选择任意三个点。哪个没关系;你会得到一个可行的三角形。

对于第二个三角形,找到“远”点并将其移除,替换剩下的点。

诀窍是寻找远点。由于您只有三个选项,因此您只需要执行两次检查以确定它是什么(如果它不是前两个,则是第三个)。那就像你要获得的效率一样高效。

给定第一个三角形(A, B, C)和第四个点D,远点是三角形中的点(假装它是A),其中线段(A, D)(B, C)相交。就这么简单。

请注意,这将适用于退化的四边形三角形,但不适用于线段。或许它会,取决于你如何定义工作......

答案 2 :(得分:0)

哦,这是另一个功课......

如果您对坐标一无所知,可能会被搞砸。将其拆分为v1,v2,v3和v2,v3,v4。你不能比这更糟糕。如果您知道这些区域或以某种方式计算它们,请继续阅读。

4个点是形成四面体的4个三角形。你有一个投影在飞机上。您需要拆分每个子集的总面积相等的三角形集。可能你正在使用浮点,所以让我们放松分裂条件。您正在寻找最小的绝对差异。

让我们调用三角形A,B,C,D的区域:

总共有2 ^ 4/2种方法可以拆分三角形集。

如果A + B + C + D最小,您在区域计算中有错误或者您有一个线段。

如果像A-(B + C + D)这样的情况最小,那么你的多边形实际上是带有额外顶点的A.或者,如果您愿意,可以从B,C,D中制作3个四边形。

如果像(A + B) - (C + D)这样的情况最小,你可以选择A,B或C,D

答案 3 :(得分:0)

如果你实际上想要渲染它们,你应该在中间创建一个顶点并制作4个三角形,中间点作为顶点之一。 否则我没有看到去(v1,v2,v3),(v2,v3,v4)

的错误

[编辑:

抱歉,我在想3D。这不适用。