这是你的谜语。你有一个由4个顶点组成的多边形,称它们为v1,v2,v3,v4。它们以任意随机顺序给出。你如何将这些顶点分成两组,每组都定义一个三角形,这样两个三角形就构成了多边形而没有重叠。
结果应如下所示:
三角形1:v1,v2,v3 三角形2:v2,v3,v4
......诀窍是,三角形不能重叠,这些点以任何顺序给出,没有任何x,y坐标的指示。这甚至可能吗?如果没有,请建议最好的方法来三角化其坐标已知的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。这不适用。