在我的程序中,我需要绘制一个垂直于来自中心的直线的矩形。
为了在 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/