【问题标题】:How do I rotate a 3D vector using yaw, pitch, and roll?如何使用偏航、俯仰和滚动来旋转 3D 矢量?
【发布时间】:2020-01-28 16:35:36
【问题描述】:

我不知道该怎么做,有谁知道我如何使用偏航、俯仰和滚动来旋转 x、y 和 z?,我只能设法进行 2D 旋转,但那不是我在找什么。这是我当前的代码。

偏航、俯仰和滚动应该以度为单位。不是弧度。

class Vector3
{//
public:
    float x, y, z;

    void rotate(float yaw, float pitch, float roll) {

    }
};

感谢您提供不需要外部库的解决方案。

编辑:

    void rotate(float yaw, float pitch, float roll) { //X Y Z Rotation
        float cosa = cos_r(yaw); float cosb = cos_r(pitch); float cosc = cos_r(roll);
        float sina = sin_r(yaw); float sinb = sin_r(pitch); float sinc = sin_r(roll);

        float Axx = cosa * cosb;
        float Axy = cosa * sinb * sinc - sina * cosc;
        float Axz = cosa * sinb * cosc + sina * sinc;

        float Ayx = sina * cosb;
        float Ayy = sina * sinb * sinc + cosa * cosc;
        float Ayz = sina * sinb * cosc - cosa * sinc;

        float Azx = -sinb;
        float Azy = cosb * sinc;
        float Azz = cosb * cosc;

        float px = x; float py = y; float pz = z;
        x = Axx * px + Axy * py + Axz * pz;
        y = Ayx * px + Ayy * py + Ayz * pz;
        z = Azx * px + Azy * py + Azz * pz;
    }

我试过了,但是没有用。 cos_r 和 sin_r 是取度数的函数。

【问题讨论】:

  • 相信我,你不会想自己的线性代数。帮我们大家一个忙,使用 eigen.tuxfamily.org/index.php?title=Main_Page 之类的东西。
  • @OldProgrammer 我不太明白那里是如何解释的。而且情况似乎有所不同。

标签: c++ vector 3d rotation trigonometry


【解决方案1】:

由于您正在实现自己的 3D 矢量类,您可能也想实现一些基本的矩阵运算。特别是,您需要rotation matrices。链接的 Wikipedia 部分显示了围绕 X、Y 或 Z 轴旋转的简单基本情况。

一旦你有了它,你会发现“yaw、roll、pitch”,即Euler angles or Tait-Bryan angles只是一种以给定顺序围绕主轴应用旋转的方式。

【讨论】:

    【解决方案2】:

    您可以使用旋转矩阵来解决问题。 https://en.wikipedia.org/wiki/Rotation_matrix

    您需要做的就是将向量乘以所需旋转的矩阵。

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      相关资源
      最近更新 更多