获取矩形的所有顶点

时间:2013-01-02 11:10:49

标签: c++ algorithm opengl

在我的程序中,我需要绘制一个矩形,该矩形垂直于来自中心的直线。

为了在3D空间中以这种方式定向矩形,我使用gluLookAt给它看lookAt点并绘制矩形图。这对我来说是正确的。

要绘制矩形(在我的框架中,在后面使用openGL),我现在使用一个矩形类并使用3D Node扩展它(其中节点具有{{1}的东西点)。给定宽度,高度和顶部顶点,绘制矩形(节点位于左上顶点,并使用lookAt定向矩形)。

lookAt还有一个Node函数,它给我3D位置(矩形左上角 - 比如300,400,20)。我试图在3D空间中获取其他三个顶点的位置以用于我的操作。由于矩形在3D空间中定向,因此不能通过添加宽度和高度来获取其他三个顶点。矩形以3D为导向,如何获得其他三个顶点的位置?

2 个答案:

答案 0 :(得分: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)。

(任何维度)中的点积是术语的乘积之和:  dot(A,B)= ax * bx + ay * by + az * bz; //适用于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 +(B-A)+(C-A),则结束到D点。

答案 1 :(得分:0)

您可以使用矩形的法线来检索其他3个点的位置。要在空间中定向矩形,您需要2个信息:

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

如果您的方向用法线表示,并且只有一个点,那么不能推导出其他点(因为您需要另一个信息来解决法线周围的旋转方程) 。我认为最好的想法是使用四元数来定位空间中的东西(你仍然可以从中恢复法线),但你也可以使用矩形中的法线+一个向量。你说你只有一个点和一个元组(宽度,高度),所以基于×操作的常用方法无法通过。

我建议你:

  • 让您的Node课程成为正确处理方向的课程; lookAt不适用于该职位;
  • 将平移矩阵(位置)与四元数(方向)中的投射矩阵相结合,以正确处理位置和方向;
  • 使用该矩阵提取您将使用的旋转矢量,如rotated × normal,以获得3点。