在 3d 空间中移动一个点

Posted

技术标签:

【中文标题】在 3d 空间中移动一个点【英文标题】:moving a point in 3d space 【发布时间】:2009-10-07 11:21:41 【问题描述】:

我有一个点在 0,0,0 我将点绕 Y 轴旋转 30 度,然后绕 X 轴旋转 30 度。 然后我想将点向前移动 10 个单位。

我知道如何计算新的 X 和 Y 位置

MovementX = cos(angle) * MoveDistance;
MovementY = sin(angle) * MoveDistance;

但后来我意识到这些值会因为 Z 而改变,不是吗?

我如何计算出 Z 并正确计算出 X 和 Y?

谢谢!

【问题讨论】:

使用旋转矩阵。 :) 他们需要付出相当大的努力来学习,但是一旦你知道如何使用它们,一切就变得更少了。 好吧,我猜 OpenGL 中的等价物是…… glRotatef( 30.0f, 0.0f, 1.0f, 0.0f ); glRotatef(30.0f, 1.0f, 0.0f, 0.0f); glTranslate(0.0f, 0.0f, 10.0f);但我想手动完成,以便知道该点的世界坐标(以便我可以将其与其他坐标进行比较) 我对 OpenGL 了解不多,但如果你的点从 (0,0,0) 开始,那么 drhirsch 是正确的,你的点不会通过旋转移动到任何地方。所以唯一能做任何事情的函数就是 glTranslate。因此,您的新位置将是 (0,0,10)。但是我觉得这可能不是你想要的。您确定您的点没有与之关联的方向向量吗? 【参考方案1】:

您应该将点坐标乘以完整的旋转矩阵,即matRotationTotal = matRotationX * matRotationY * matRotationZ。详情请查看this文章。

【讨论】:

以上是关于在 3d 空间中移动一个点的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中从数据点中查找移动平均值

在 3d 中沿贝塞尔路径移动对象:旋转问题

妙味移动端“淘宝造物节” 3D绚酷空间VR场景应用视频教程

Unity3D 物体移动方式

OpenGL 鼠标在 3D 空间中的位置

Unity3D 角色(物体) 移动方法 合集