我如何使用偏航,俯仰和滚动旋转3D矢量?

问题描述 投票:0回答:2

我不知道该怎么做,没有人知道我如何使用偏航,俯仰和滚转来旋转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是带度的函数。

c++ vector 3d rotation trigonometry
2个回答
1
投票

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

一旦有了,您会发现“偏航,滚动,俯仰”,即Euler angles or Tait-Bryan angles只是一种以给定顺序应用绕主轴旋转的方法。

0
投票
您可以使用旋转矩阵来完成技巧。https://en.wikipedia.org/wiki/Rotation_matrix

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

© www.soinside.com 2019 - 2024. All rights reserved.