c++ - 获取矩形的所有顶点

标签 c++ algorithm opengl

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

为了在 3D 空间中以这种方式定位矩形,我使用了 gluLookAt 给它 lookAt 点并绘制了矩形图形。这对我来说工作正常。

要绘制矩形(在我的框架中,它在后面使用 openGL),我现在使用矩形类并使用 3D Node 对其进行扩展(其中 node 是具有 lookAt 点)。给定宽度、高度和顶部顶点,绘制矩形(节点位于左上角顶点并使用 lookAt 定向矩形)。

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

最佳答案

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

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

为什么稍微少一点,是A、B、C坐标的任何三元组不一定形成90度角——但追求简单的可能排列并准备计算确实没有多大意义叉积或归一化 vector 。

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

编辑: vector 算术初级:

要添加/减去 vector ,需要对元素求和。 A=B+C 表示(ax=bx+cx;ay=by+cy;az=bz+cz)。

(任何维度)的点积是项乘积的总和: 点(A,B) = ax*bx + ay*by + az*bz;//对于 2、3、4,任意数量的元素/维度。

Cross product是一个特殊的运算符,至少在 2 维和 3 维中定义明确。叉积的一种几何解释是它产生一个垂直于其参数的两个 vector 的 vector 。

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

可以“添加”这些定向 vector ,例如作为:

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

因此,如果将 vector A+(B-A) + (C-A) 相加,则到点 D 结束。

关于c++ - 获取矩形的所有顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14121009/

相关文章:

c++ - 退出控制台后析构函数未运行

c++ - 使用 glCreateBuffers 时出现访问冲突错误

c++ - Lambda 捕获和成员变量

C#小数背包o(n logn)解决方案

algorithm - 在CIEXYZ到CIELUV的转换中, `u'`, `v'`, `u' ₙ`, ` v' ₙ`, and ` Yₙ`是什么?

c++ - OpenGL 立方体的纹理不正确

c++ - 直接调用(虚拟)析构函数是否有效?

C++ 拆分字符串反馈

algorithm - 随机元素的多参数优化

c++ - 距离场字体渲染的实现