按顺时针顺序对点阵列进行排序

时间:2016-01-21 05:58:40

标签: unity3d mesh

是否有这样的算法按顺时针顺序对3D点阵列进行排序? 在我的情况下我特别处理直角三角形,所以只有3分。 (用于构建网格)

2 个答案:

答案 0 :(得分:1)

假设您有两条边连接三个顶点。

E1 = V2 - V1
E2 = V1 - V3

它们跨越三角形。您可以像这样计算三角形的正常N

N = cross(E1, E2)

这会告诉您三角形朝向哪个方向。您可以通过将P投影到距离N的三角形距离来计算三角形是朝向还是远离某个视点P

D = V1 - P
d = dot(N, D)

如果d为正数,则三角形偏离P,如果为负,则面向P

您现在可以判断每组(V1,V2,V3)是否正确排序。如果没有,只需交换V2和V3即可。

但有一个陷阱。如果您正在尝试构建封闭网格的船体,则要求所有三角形都朝向外部。这不能通过尝试使所有三角形面向某个点来建模,因为对于每个三角形,该点必须是不同的。如果网格是凸透的,则可以通过要求所有三角形从某个点(位于凸网格内部)中面向来对其进行建模。

答案 1 :(得分:0)

排序算法并不困难。问题是,那些点在哪个平面上。它面向哪一方

只有一堆点本身不能顺时针或逆时针。你需要一个平面和一个侧面来引用这些点

编辑:实际上我以前说的有点不准确。你真正需要的是参考的位置和方向,而不是平面