【问题标题】:3D Vector coordinates from x and y rotation来自 x 和 y 旋转的 3D 矢量坐标
【发布时间】:2021-01-26 08:12:15
【问题描述】:

我多次尝试谷歌这个问题,但我发现只有关于“旋转矩阵”的文章。

我有 3d 坐标系和两个角度:α 用于 x 旋转,β 用于 y 旋转(我不确定我是否在图表中正确定位了角度)。

我需要找到Vector(x_1, y_1, z_1)的坐标

请帮我找出公式。

【问题讨论】:

  • 所以你正试图以角度 alpha 和 beta 围绕 x 和 y 轴旋转一个向量(x,y,z)?我只是想了解您想要的输入和输出
  • 我想找到这个向量的坐标。在程序的开头,角度是x = 0y = 0
  • 是的,但是什么向量?看起来您从 (x,y,z) => (1,0,0) 处的单位向量开始,并通过绕 z 轴逆时针旋转 alpha 弧度然后顺时针旋转 alpha 弧度来转换它y 轴。对吗?
  • 我猜,alpha 角度放错了位置,所以向量有坐标(0, 0, 1)
  • 但是 alpha 是围绕 y 轴的旋转,而 beta 是围绕 z 轴的旋转?

标签: math vector 3d


【解决方案1】:

让我们把它分成两个转换。

从 (0,0,1) 处的单位向量开始,我们将首先应用 alpha 变换。

您可以将绕 y 轴的旋转视为二维变换,而完全忽略 y 轴。然后,用变换角 (alpha) 的 cos 和 sin 获得 x 和 z 分量就变得很简单了。我们知道向量的长度是 1,因为它是单位向量,但您的向量可以是任意长度 - 只需将 cos 和 sin 方程乘以向量的长度即可。

第一个转换给我们留下了这个公式:

(x1, y, z1) => (sin(alpha), 0, cos(alpha))

假设您的变换角度从 +z 轴开始,随着它的增加,该角度围绕 y 轴(或在 XZ 平面上)逆时针移动。

对于第二个变换,我们围绕垂直于向量的轴旋转。我们将做一些非常相似的事情,但这次用 x1 和 z1 代替我们的新值 sin(alpha) 和 cos(alpha)。

得到 y1 就像像以前一样取 beta 角的 sin 一样简单,但是转换 x1 和 z1 需要我们通过这个三角形的余弦分量来缩放 x1 和 z1。这是因为 x1 和 z1 之间的关系不会随着我们围绕它们的垂直轴旋转而改变。

想象一个圆心在原点,圆周上有一个点在 (x1, 0, z1)。当我们围绕该圆旋转矢量时,x1 和 z1 相对于中心点进行缩放,但它们的比例不会改变。

我们所要做的就是用我们的 beta 角的余弦分量来缩放这两个数字。我在这里标记了那个 omega。

这给我们留下了一个最终公式

(x2, y1, z2) => (cos(beta)*sin(alpha), sin(beta), cos(beta)*cos(alpha))

【讨论】:

  • 我不明白,我做错了什么。我只是将方向向量添加到我的位置:camera = camera + dir,它的工作原理很奇怪。 this is how it works这就是我使用它的方式:float alpha = theta.x; float beta = theta.y; Vector dir(cos(beta)*sin(alpha), sin(beta), cos(beta)*cos(alpha)); camera = camera + dir;
  • 前向向量的 Z 分量没有改变。你能告诉我你的代码实现吗?同样以这种速度,您可能只是相机的前向矢量。
  • 如果可以,请在左上角显示 theta 的来源,以及 X、Y 和 Z 的设置。
  • 我也不使用z组件,所以它总是0
猜你喜欢
  • 2010-12-28
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多