倾斜运动如何影响俯仰和偏航?

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

我正在尝试模拟飞机的转弯,特别是倾斜。因此,我想要一个俯仰运动来根据滚转水平改变飞机的实际俯仰和偏航。例如,如果飞机没有滚动,俯仰它会直接向上转动,但如果有一定程度的滚动,飞机会稍微向上转动并稍微向侧面转动。

现在我正在使用矩阵变换来旋转模型,并且我使用的顺序使俯仰和偏航独立于滚动 - 因此,我需要弄清楚当飞机倾斜时滚动将如何影响俯仰和偏航。

这是我尝试过的:

if (keys["arrowleft"]) {
  plane.roll -= 0.1;
}
if (keys["arrowright"]) {
  plane.roll += 0.1;
}
if (keys["arrowup"]) {
  plane.pitch -= 0.1*Math.cos(plane.roll);
  plane.yaw -= 0.1*Math.sin(plane.roll);
}
if (keys["arrowdown"]) {
  plane.pitch -= 0.1*Math.cos(plane.roll);
  plane.yaw -= 0.1*Math.sin(plane.roll);
}

换句话说,有没有办法用基本公式将滚动时的俯仰运动(给定当前方向)转换为适当的欧拉角?或者我需要使用不同的矩阵变换吗?

math 3d html5-canvas
1个回答
0
投票

所有俯仰、滚动和偏航操作都会旋转飞机的方向矢量,因此左/右不应为滚动添加固定值,而是以某个角度滚动飞机,这是通过将 3D 向量与 3D 旋转相乘来实现的矩阵。

如果我们的平面方向向量有序为 p、r、y,则滚动是在 r 上的旋转:

|  cos(a)  0  sin(a) |   |p|
|    0     1    0    | x |r|
| -sin(a)  0  cos(a) |   |y|

同样,俯仰意味着在p上旋转,所以

|  1     0       0    |   |p|
|  0   cos(a) -sin(a) | x |r|
|  0  -sin(a)  cos(a) |   |y|

然后您可以更新飞机沿横滚轴的位置,并校正偏航。

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