2013-01-02 55 views
1

在我的程序中,我需要绘制一个与来自中心的线垂直的矩形。获取矩形的所有顶点

要在3D空间中以这种方式定向矩形,我使用gluLookAt为其指定了lookAt点并绘制了矩形图。这对我来说是正确的。为了绘制矩形(在我的框架中,在后面使用openGL),我现在使用一个矩形类并使用3D Node(其中节点是具有lookAt点的东西)扩展它。给定宽度,高度和顶部顶点,绘制矩形(节点位于左上顶点并使用lookAt定向矩形)。

Node也有一个getPosition()功能,给我它的三维位置(矩形左上角 - 说300,400,20)。我试图在3D空间中获得其他三个顶点的位置以用于我的操作。由于矩形面向三维空间,其他三个顶点不能仅通过增加宽度和高度来获取。矩形以3D为导向,我如何获得其他三个顶点的位置?

+0

矩形如何垂直于某物? – AJMansfield

+0

OP可能是指矩形的法向量 – Kos

+0

@Kos是正确的关于法向量thingy。 – user1240679

回答

0

可以retreive使用正常的其它3点的位置的矩形。为了在空间中定向矩形,需要2个信息:

  • 其位置,通常表示为3或4分量矢量或4x4矩阵;
  • 它的方向,通常表示为一个四元数。

如果你有一个正常的代表的方向,只有一个点,你刚才无法推导出其他点(因为你需要其他信息来解决周围正常旋转式)。我认为最好的想法是使用四元数来定位太空中的东西(您仍然可以从中取回法线),但是您也可以使用矩形中的正常+一个矢量。你说你只有一个点,还有一个元组(宽度,高度),所以基于×操作的常用方法将无法通过。

我建议你:

  • 让你Node类,正确处理方向的一类; lookAt不是为那项工作设计的;
  • 将平移矩阵(位置)与来自四元数(方向)的投射矩阵组合以正确处理位置和方向;
  • 使用该矩阵提取您将使用的旋转向量,如rotated × normal以获得3点。
0

坐标的最小数量略小于9:这是三维空间(Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz)中一个通用矩形的三个顶点。

最后一个例如d = A +(B-A)+(C-A)= B + C-A。

为什么略少,A,B,C坐标的任何三元组都不一定形成90度角 - 但对于追求简单可能的安排并没有多大意义,并且准备好计算交叉产品或归一化向量。

A----B 
| | 
C---(D) 

编辑:矢量算术初级:

要加/减矢量,一个求和的元素。 A = B + C表示(ax = bx + cx; ay = by + cy; az = bz + cz)。点(A,B)= ax * bx + ay * by + az * bz;点(A),点B // 2,3,4,任意数量的元素/维度。

Cross product是一个特殊的运算符,它至少在2维和3维中都有明确定义。交叉乘积的几何解释之一是它产生一个垂直于它的参数矢量的矢量。如果A是一个向量(ax,ay,az),它也意味着从原点O =(0,0,0)即A = AO =(ax-0,ay-0,az- 0);同样,(B-A)是从A到B(有时写为AB(有箭头→顶部)的[方向]矢量。)

可以'添加'这些定向矢量,例如,为:

o-----> 
      \ 
      \ 
     <------o 
    /
    /
    x 

所以,如果加上矢量A +(BA)+(CA),一个结束于点D.

+0

我不完全是什么意思,但这是否意味着三点可以通过矢量等产品找到? – user1240679

+0

是的。如果你有一个平面的矢量和一个正交矢量(BA)是正交的(即它们的点积是零),那么向上/向上矢量(CA)就是两者的叉积,D = B + CA再次。 –

+0

感谢您的回复。如果你可以扩大答案,用“CA”,“B + A”和数学术语来增加更多细节来获得坐标,因为我对OpenGL没有真正的经验。 – user1240679