2010-01-01 127 views
1

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

如果我更多地讨论这个,

我有它由一套多边形的3D模型。每个多边形都是顶点的集合,我想计算多边形曲面的范数。要计算范数,我必须考虑逆时针顺序的顶点。我的问题是给定的顶点集,我怎样才能确定它是顺时针还是逆时针排序?


这是用于导航网格生成的地方,我想要删除代理不能走的多边形。为此,我的方法是计算表面范数(多边形的垂直矢量),并根据2D平面的角度去除多边形。要计算规范,我应该知道排列哪些点。所以对于多边形中给定的一组点,我怎样才能确定点的排列顺序。

Ex。

polygon1由Vertex1 = [-21.847065 -2.492895 19.569759],Vertex2 [-22.279873 1.588395 16.017160],Vertex3的[-17.234818 7.132950 7.453146]这3点,我怎么能确定它们的顺序

+0

你将有更好的运气在http://mathoverflow.net。 – 2010-01-01 07:24:26

+5

在3D空间中没有顺时针或逆时针这样的东西。顺时针或逆时针仅适用于2D平面。如果您想首先在2D平面上投影顶点,则由您来定义该平面。如上所述,你的问题毫无意义。 – AnT 2010-01-01 07:25:28

+0

我很困惑;你的顶点已经订购了,你想确定订单,还是他们是随机排列的,你想把它们排列好?你也知道,为了做出这个决定,顶点需要被映射到一个平面,并且一方需要被声明为前方? 通常订购用于指定三角形是否面向相机。 无论哪种方式,你为什么要这样做,在什么语言和框架?或者这是一个家庭作业问题? – dlamblin 2010-01-01 07:29:15

回答

1

你的问题定义不足以给出完整的答案,但这里是一个的骨架。

缺少的部分(肉,如果你愿意),是一个函数,需要任何两个坐标,并告诉你哪一个比另一个'更大'。没有一个明确的定义,你将无法做任何事情。

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

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

编辑 重新阅读您的问题后,也发生在我身上,由于这n个顶点定义多边形,你也许可以做,他们都趴在同一平面上(如果他们不这样做的假设,那么好运渲染)。因此,如果您可以将矢量坐标映射到该平面上的2d位置,则可以减少您的问题,以便在二维空间中顺时针或逆时针对它们进行排序。

7

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

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

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

以正常的dot product从给定的角度来看,V矢量,到顶点的人会给你,其符号表示该方式的值顶点出现风从V观察:

w = N . (A - V) 

这是否是积极的顺时针和负逆时针为或者相反,将取决于你的坐标系的螺旋。

0

我觉得你的困惑来自于一个事实,即用于计算跨产品的方法,有时教clockwiseness方面,具有3点A,B,C确定的标志clockwiseness的检查: (B-A) X (C - A) 但是一更好的定义实际上决定了这一点。 一般而言,三维中的任意点不能说是顺时针排列,而是3个,因为3个点总是位于一个平面内。