【发布时间】: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