Углы Эйлера между 2 векторами (не стандартные)

У меня есть задача рассчитать рыскание, тангаж и крен между 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 все время. Бросок недействителен — должен быть всегда 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) рулон должен быть всегда нулевым

2) рыскание больше не проблема

3) шаг должен быть правильным и зависеть от расстояния и разности по оси Z, исходное значение зажаты между -1,484 и 1,134 ...

Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]