Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取矩形的所有顶点_C++_Algorithm_Opengl - Fatal编程技术网

C++ 获取矩形的所有顶点

C++ 获取矩形的所有顶点,c++,algorithm,opengl,C++,Algorithm,Opengl,在我的程序中,我需要绘制一个矩形,该矩形与从中心开始的直线垂直 为了在3D空间中以这种方式确定矩形的方向,我使用了gluLookAt为它指定了注视点,并绘制了矩形图形。这对我来说是正确的 为了绘制矩形(在我的框架中,在后面使用openGL),我现在使用了一个矩形类,并用一个3D节点对其进行了扩展(其中节点是具有一个注视点的对象)。给定宽度、高度和顶部顶点,将绘制矩形(节点位于左上角顶点,并使用lookAt确定矩形的方向) 节点还有一个getPosition()函数,它为我提供了它的3D位置(矩形

在我的程序中,我需要绘制一个矩形,该矩形与从中心开始的直线垂直

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

为了绘制矩形(在我的框架中,在后面使用openGL),我现在使用了一个矩形类,并用一个3D
节点对其进行了扩展(其中节点是具有一个
注视点的对象)。给定宽度、高度和顶部顶点,将绘制矩形(节点位于左上角顶点,并使用lookAt确定矩形的方向)


节点
还有一个
getPosition()
函数,它为我提供了它的3D位置(矩形的左上角-比如300400,20)。我正在尝试获取其他三个顶点在3D空间中的位置,以用于我的操作。由于矩形是在三维空间中定向的,所以不能仅通过增加宽度和高度来获取其他三个顶点。如果矩形在3D中定向,如何获得其他三个顶点的位置?

最小坐标量略小于9:这是3D空间中通用矩形的三个顶点(Ax、Ay、Az、Bx、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;//对于2,3,4,任何数量的元件/尺寸

是一种特殊运算符,至少在二维和三维中定义良好。叉积的一种几何解释是,它产生一个向量,该向量垂直于其参数的两个向量

如果A是一个向量(ax,ay,az),它也意味着从原点O=(0,0,0)的方向向量,即A=A-O=(ax-0,ay-0,az-0); 类似地,(B-A)是从A到B的[方向]向量(有时写为AB(顶部有一个箭头-->))

可以“添加”这些定向向量,例如:

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

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

  • 其位置,通常表示为3或4分量向量或4x4矩阵
  • 其方向,通常表示为四元数
如果用法线表示方向,并且只有一个点,则无法推断其他点(因为需要其他信息来求解法线周围的旋转方程)。我认为最好的办法是使用四元数来确定空间中物体的方向(你仍然可以从中检索法线),但是你也可以从矩形中使用法线+一个向量。您说过您只有一个点和一个元组(宽度、高度),因此基于×运算的常用方法无法通过

我建议你:

  • 使您的
    节点
    类成为正确处理方向的类
    lookAt
    不是为该工作设计的
  • 将平移矩阵(位置)与四元数(方向)的转换矩阵相结合,以正确处理位置和方向
  • 使用该矩阵提取一个旋转向量,如
    rotated×normal
    获得3个点

我不完全明白这意味着什么,但这是否意味着可以通过向量的叉积等找到三个点?是的。如果平面的“法线”向量和正交的右向量(B-a)(即它们的点积为零),那么下/上向量(C-a)是这两个向量的叉积,D=B+C-a。谢谢你的回答。如果你能扩展答案,用
C-A
B+A
的术语和获得坐标的数学来添加更多细节,那就太好了,因为我对opengl并没有真正的经验,我对线性代数的基础知识没有一定的了解。如果没有这些,图形编程将很难继续。仅供参考,3空间中的矩形有8个自由度(3个用于平移,3个用于旋转,2个用于缩放),因此您至少需要8个坐标来约束它。额外的一个只是使约束更加统一,因此每次使用它时计算量更少。矩形怎么可能垂直于某个对象?OP可能指的是矩形的法线vector@Kos关于法向量是对的。