gpt4 book ai didi

c++ - XYZ 旋转平移和倾斜

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:31 25 4
gpt4 key购买 nike

我正试图从我的电脑控制一个特定方向的摇头相机。摄像机仅由平移(540 度)和倾斜(280 度)控制。问题是将欧拉角转换为这些平移和倾斜度数。

我有一个方向的 3d 表示,比方说 X Y 和 Z 旋转(欧勒角)。

现在我想将我的(物理!)云台相机朝同一方向移动。但我不知道如何将 xyz vector 转换为摇摄。

最佳答案

切换到正交齐次 4x4 变换矩阵

  • 欧拉角不利于复杂的内存运动。
  • M 是您的 4x4 相机变换矩阵

按角度绕全局世界 X 轴旋转:

double c=cos(ang),s=sin(ang);
double Q[16]=
{
1, 0, 0, 0,
0, c,-s, 0,
0, s, c, 0,
0, 0, 0, 1
};
M=M*Q;

绕本地相机X轴旋转角度:

double c=cos(ang),s=sin(ang);
double Q[16]=
{
1, 0, 0, 0,
0, c,-s, 0,
0, s, c, 0,
0, 0, 0, 1
};
M=((M^-1)*Q)^-1;

有像 glm 这样的变换矩阵库,但我更喜欢我自己的库

  • 我知道很多人会不同意,但我在这里的时间比其他任何公众都长
  • 我已经习惯了
  • 想法是始终记住 M 的正矩阵和逆矩阵
  • 有一个标志,哪个是更新的,哪个不是
  • 在任何操作之前检查使用的矩阵是否相关
  • 如果不是则从另一个计算
  • 同时添加操作计数和达到阈值后
  • 进行正交性或正交性检查/校正

在这里您可以看到同质 (4x4) 和普通 (3x3+1x3) 3D 变换矩阵之间的差异:

现在相机的驱动

  • 我将在 4x4 变换矩阵上方的链接中引用我的图像
  • 我通常使用 Z 轴作为移动/观察方向
  • 所以在开始时将矩阵重置为单位或将其设置为您需要的位置和方向
  • 当你想旋转时使用局部旋转
  • 当你想要移动时,只需将你想要移动的偏移量添加到位置 x0,y0,z0(在全局坐标中)
  • 如果 d 单位这样做,则继续前进:

    x0+=d*Zx;
    y0+=d*Zy;
    z0+=d*Zz;
  • 对于侧向移动使用 X vector

  • 向上/向下使用 Y vector
  • 对于不同于绕 X 轴的旋转,只需使用不同的 Q 矩阵

  • 绕Y轴旋转

     c, 0, s, 0,
    0, 1, 0, 0,
    -s, 0, c, 0,
    0, 0, 0, 1;
  • 绕Z轴旋转

     c,-s, 0, 0,
    s, c, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1;

关于c++ - XYZ 旋转平移和倾斜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com