2009-04-15 32 views
3

给定一个点的列表,这些点形成一个简单的3D空间定向的多边形和该多边形的法线,确定哪些点是特定“角点”的好方法是什么?多边形数学

例如,哪个点位于左下角,右下角或最顶点?多边形可能以任何3D方向为导向,所以我非常确定我需要用正常的方法做一些事情,但是我很难正确地计算数学。

谢谢!

+0

你问的是http://en.wikipedia.org/wiki/Convex_hull? – 2009-04-15 21:20:58

+0

提供的信息不足以真正给出答案如果多边形在感兴趣的平面中任意旋转,我们没有得到任何有关多边形的信息,Rectangle?Triangle?Hexagon? – 2009-04-16 09:57:39

回答

1

你在寻找一个边框吗?

我不确定正常情况与您的要求有什么关系。

要获得边框,保持4个变量:MINX,MAXX,MINY,美星

然后通过所有的点的循环,核对MAXX和MINX,以及对美星和MINY您的Y值的X值,根据需要更新它们。

循环完成时,你的箱子被定义为MINX,MINY为左上,MINX,美星的右上方,等等...

回应您的评论:

如果你想在投影后想要你的盒子,你需要的是获得“转换”点。然后如上所述应用边界框循环。

转换通常意味着投影(场景渲染)后的2D屏幕坐标,但它也可能表示投影到任何平面上的2D点。

0

将它投影到飞机上并获得边界框。

1

一个可能的算法将是

  1. 找到正常的,你可以做,通过使用连接2对不同角落

  2. 的创建变换矩阵旋转多边形向量的积因此它在XY空间中是平面的(即沿Z轴正常对齐)

  3. 计算边界框的坐标或任何其他正在使用的角的定义(因为多边形是现在在2D空间中对齐,这是一个相当简单的问题)

  4. 应用步骤2中使用的变换矩阵的逆来将这些坐标变换回3D空间。

2

您需要更多信息才能做出该决定。一组(共面)点和一个法线不足以给你一个“左下”或“右上”的概念或任何这样的相对识别。

从法线方向查看多边形(使其看起来像一个简单的2D形状)是一个好的开始,但该形状可以旋转到任意角度。

  1. 3D世界中是否还有一些其他信息可以用来获得坐标系参考?

  2. 你想通过了解形状的极端角落来完成什么?

1

我相信你的问题需要一些额外的信息 - 即任何一点可以被认为是“最高”或“最左边”的坐标系统。

不要忘记,虽然正常告诉你多边形面临哪种方式,但它本身并不能告诉你哪个方向是“向上”的。可以旋转(或“滚动”)大约法线向量,仍然朝向相同的方向。

这就是为什么大多数3D渲染系统都有一个摄像头,它不仅包含“视图”矢量,还包含“上”和“右”矢量。后两者的变化实现了相机在视角矢量周围“滚动”的效果。

0

我有一个愚蠢的想法,但在获得负点的风险,我给它一个尝试:

  1. 从 每个每个三维轴获取最大值/最小值 指向你的2D多边形。一个循环/迭代器遍历每个点的值列表就足够了,只需替换最小值和最大值即可。最终结果是具有“最低”X,Y,Z坐标和“最高”X,Y,Z坐标的列表。
  2. 遍历此列表中的最小/最大值,以创建围绕对象的“边界框” 的每个点 (“拐角”)。结果 应该是一个始终包含 对象的框,而不管轴 已检查或定向( 上的点不会超过您收集的最大值或最小值的 )。
  3. 然后获得每个“2d 多边形”的距离指向“边界框”上的每个角落 位置; 缩短了点之间的距离, “更接近”它与该“转角”。

远不是最优的,肯定是坏的,但肯定很快。您可以在对象旋转期间通过简单地查找每个旋转的x/y/z值的最小值/最大值并提前保留这些值的列表来捕获此对象。

0

如果您可以假设对形状有一些限制,那么您可能会知道更少的信息。例如,如果你的形状是一个细长三角形的小方格(即一个简单的对称几何)的组成,那么你可以比较每个列表点到“质心”的距离。最大的距离将识别锥体的尖端,第二大的距离将是离锥体的尖端最远的两个点,等等。如果列表中有一些顺序,则像逆时针顺序(约正常),你可以识别所有的点。这听起来像是一些计算,所以可能有必要在图形中加入一些额外的信息,比如“质心”和位于COM上方的“上”的参考点(但不是沿着正常的)。例如,这将为您提供一个“向上”向量,您可以与法线交叉来定义一些身体坐标。另外,法线可以通过点列表的排序来定义。如果你不能假设形状的任何东西(或者即使形状是对称的),那么你将需要更多的数据。这取决于你的约束。

0

如果您知道3D中的多边形是“平坦的”,则可以使用法线将顶点的所有3D点转换为2D表示(相对于多边形所在平面的点) ) - 但是这仍然让你定义这个坐标系的原点(但这对你的问题并不重要),并且至少有一个坐标轴的方向(如果你想要正交坐标轴,你仍然可以旋转它们围绕你选择的原点) - 这是麻烦开始的地方。 我建议使用3D坐标系的Y轴,在您的飞机上进行投影,并将结果方向用作“向上” - 但如果您的计划与Y轴正交,则会遇到麻烦(现在您可能需要使用投影的Z轴作为“向上”)。

数学很简单(您可以使用内积(也称为标量积)投影到您的平面,并将一些矩阵的东西转换为二维坐标系 - 您可以通过搜索光线跟踪器算法对于多边形,