如何确定3D顶点的排序

时间:2010-01-01 07:20:33

标签: math

如果我在3D坐标空间中有5个顶点,我如何确定这些顶点的顺序。即顺时针或逆时针。

如果我详细说明,

我有一个由多边形组成的3D模型。每个多边形都是顶点集合,我想计算多边形表面的范数。要计算范数,我必须以逆时针顺序考虑顶点。我的问题是给出一组顶点我如何确定它是顺时针还是逆时针排序?


这适用于导航网格生成,我想删除代理无法行走的多边形。为此,我的方法是计算表面范数(多边形的垂直向量)并根据与2D平面的角度移除多边形。为了计算标准,我应该知道排列的顺序点。因此,对于多边形中给定的点集,我如何确定点排列的顺序。

实施例。

polygon1由Vertex1 = [-21.847065 -2.492895 19.569759],Vertex2 [-22.279873 1.588395 16.017160],Vertex3 [-17.234818 7.132950 7.453146]这三点组成,如何确定它们的顺序

3 个答案:

答案 0 :(得分:8)

正如其他人所说,你的问题并不完全清楚。这是3D backface culling测试吗?如果是这样,您需要一个点来确定相对于的缠绕方向。从多边形的一侧看,顶点看起来顺时针旋转。从另一侧看,它们似乎逆时针缠绕。

但假设你的多边形是凸的并且是正确的平面。取任意三个连续的顶点A,B和C.然后你可以使用surface normal找到cross product向量:

N = (B - A) x (C - A)

将法线的dot product与给定视点中的矢量V一起取到一个顶点将给出一个值,该符号表示当从V观察时顶点看起来风的方式: / p>

w = N . (A - V)

顺时针方向是正向还是逆时针方向为负,反之亦然取决于坐标系的旋向性。

答案 1 :(得分:1)

你的问题定义太差,无法给出完整的答案,但这是一个人的骨架。

缺失的部分(如果你愿意的话,肉)是一个函数,它采用任意两个坐标并告诉你哪一个比另一个“更大”。如果没有一个可靠的定义,你将无法做任何事情。

其余的,骨架,非常简单。使用比较函数对矢量列表进行排序。对于五个向量,只需要一个简单的bubble sort,但如果顶点数量大大增加,您可能需要查看更快的排序算法(即Quicksort)。

如果您选择的语言/图书馆为您提供排序,那么您已经拥有了骨架。

修改 在重新阅读你的问题之后,我也想到,由于这些n个顶点定义了一个多边形,你可以假设它们都位于同一个平面上(如果它们没有,那么好运渲染的)。

因此,如果您可以将矢量坐标映射到该平面上的2d位置,则可以减少问题,使其在二维空间中顺时针或逆时针排序。

答案 2 :(得分:0)

我认为你的困惑来自这样一个事实,即计算交叉产品的方法有时用顺时针方法来教,检查3点A,B,C的顺时针确定符号: (B-A) X (C - A) 但是,更好的定义实际上决定了这一点。 一般来说,3个维度中的5个任意点不能说具有顺时针顺序,但3个可以因为3个点总是位于平面中。