我不知道如何进行此操作,有人知道我如何使用偏航,俯仰和滚转来旋转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是带度数的函数。
答案 0 :(得分:1)
由于您正在实现自己的3D矢量类,因此可能也希望实现一些基本的矩阵运算。特别是,您需要rotation matrices。链接的Wikipedia部分显示了绕X,Y或Z轴旋转的简单基础。
有了这些,您将发现“偏航,滚动,俯仰”,即Euler angles or Tait-Bryan angles只是一种以给定顺序应用绕主轴旋转的方法。
答案 1 :(得分:0)
您可以使用旋转矩阵来完成技巧。 https://en.wikipedia.org/wiki/Rotation_matrix
您需要做的就是将向量乘以所需旋转矩阵。