如何使用偏航、俯仰和滚动旋转 3D 矢量?
How do I rotate a 3D vector using yaw, pitch, and roll?
我不知道我会怎么做,有谁知道我如何使用偏航、俯仰和滚动来旋转 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是需要学位的函数。
由于您正在实现自己的 3D 矢量类,因此您可能还希望实现一些基本的矩阵运算。特别是,您需要旋转矩阵。链接的维基百科部分显示了围绕 X、Y 或 Z 轴旋转的简单基写。
一旦你有了它,你会发现"偏航,滚动,俯仰",即欧拉角或泰特-布莱恩角只是以给定顺序围绕主轴应用旋转的一种方式。
您可以使用旋转矩阵来解决问题。 https://en.wikipedia.org/wiki/Rotation_matrix
您需要做的就是将矢量乘以所需旋转的矩阵。
相关文章:
- 使用一个考虑到std::map中键值的滚动或换行的键
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- QScrollArea:由垂直滚动条引起的水平滚动条
- 跟踪滚动条上的鼠标事件
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 如何在不使用滚动条的情况下使视图更改
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何为对象生成滚动效果?
- 如何模拟不同边数的骰子滚动?
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 子轴围绕父轴而不是他自己的轴旋转
- 如何使用偏航、俯仰和滚动旋转 3D 矢量?
- 用螺距,偏航,使用特征滚动创建旋转矩阵
- QScrollArea中的QSpinBox:如何防止旋转框在滚动时窃取焦点