我有一个任务来计算2个3d矢量之间的偏航,俯仰和滚动
具有相同目的地向量但来源不同的2个示例:
1) First example:
Source vector: x=-626.264 y=-233.745 z=2270.071
Dest vector: x=-753.13 y=-1680.23 z=1881.34
Original rotation matrix 3x3:
-0.082 -0.021 -0.996
-0.964 -0.255 0.080
-0.256 0.967 -0.000
Must be: yaw=1.655 pitch=-0.321 Roll=0.0
2) Second example:
Source vector: x=-168.809 y=-1121.165 z=1880.855
Dest vector: x=-753.13 y=-1680.23 z=1881.34
Original rotation matrix 3x3:
-0.720 0.001 -0.694
-0.694 0.001 0.720
0.002 1.000 -0.000
Must be: yaw=2.375 pitch=0.0 (at the same height) Roll=0.0
我已尝试过:
1)恢复原始矩阵并重新计算角度:
pitch = -atan2f(-rot[1][2], rot[2][2]);
yaw = -atan2f(-rot[0][1], rot[0][0]);
编辑:有效的偏航,但反转。音高无效,PI / 2一直无效。 roll无效 - 必须始终为0
2)从增量计算角度:
yaw = atan2(delta.x, delta.y);
float padj = sqrt(pow(delta.x, 2) + pow(delta.x, 2));
pitch = atan2(padj, delta.z)
编辑:有效的偏航。音高是动态的,但无效。滚动不计算(必须如此)
问题无关紧要:
1)roll 必须始终为null
2)偏航不再是问题
3)音高必须正确并且取决于距离和z轴差异,原始值钳位在-1.484和1.134之间。。
谢谢!