Мне нужно компенсировать потоковые данные кватерниона на определенную сумму. Для этого я планирую получить разницу между 2, а затем смещать первую на вторую.Найти разницу во времени между двумя кватернионами для калибровки двух систем координат
У меня возникли проблемы с поиском разницы между 2.
Я бегу этот код:
public void convertQuat180()
{
Quaternion q = new Quaternion(0.65328f, 0.2706f, 0.65328f, -0.2706f); //45,180,0
Quaternion q180 = new Quaternion(0.70711f, 0, 0.70711f, 0); // 0,90,0
Quaternion result = q180 * Quaternion.Inverse(q);
Console.WriteLine(result);
}
Я бы ожидать result
быть:
(euler) diff = 45, 90 , 0
Но вместо этого я получаю:
135,-180,0
Где я собираюсь здесь не так?
Я не уверен, имеет ли смысл представить это с использованием углов Эйлера. Вращение разности, скорее всего, не будет иметь углов, которые являются отличием двух поворотов источника. Во всяком случае, с приведенной выше формулой вы получаете поворот, такой как 'result * q = q180'. Разве это не то, что вы хотели? –
ОК, может быть, я должен придерживаться quats, чтобы проверить. Я новичок в них, и мне гораздо легче воображать Эйлера! Является ли приведенный выше код действительным, чтобы найти разницу? И тогда как я применил бы эту разницу к оригинальному quat? – anti
Проблема углов Эйлера заключается в том, что оси не могут быть видны независимо друг от друга. По-видимому, лучшей альтернативой этому сценарию является прилипание к кватернионам или матрицам вращения. Вы обновляете поворот, представленный кватернионом, простым умножением (см. Мой первый комментарий). Но, конечно, это вернет вас к отправной точке. –