2个向量之间的欧拉角(非标准)

时间:2016-10-24 21:27:45

标签: c++ math rotational-matrices euler-angles

我有一个任务来计算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之间。

谢谢!

0 个答案:

没有答案