Пожалуйста, извините мое невежество в отношении кватернионов (пытаясь узнать их, когда я печатаю это). В контексте 3D-графики предположим, что у меня есть точка p1, которая трансформируется серией кватернионов от q0 до qn, уступая точке p2. Зная все кватернионы, чтобы получить от p1 до p2, можно ли сделать обратное, чтобы вернуться к p1?
Я пробовал что-то глупое, но это не дало мне того, что я хотел:
int main(void)
{
vmath::vec4 p1(4.0f, 3.0f, 2.0f, 1.0f);
print_vec4(p1);
vmath::quaternion q1(1.0f, 0.0f, 0.0f, M_PI);
vmath::vec4 p2 = p1 * q1.asMatrix();
print_vec4(p2);
vmath::quaternion q2(q1);
q2 = q2.conjugate();
p2 = p2 * q2.asMatrix();
print_vec4(p2);
return 0;
}
T = q1 * q2 *... qn обратное преобразование к этому равно T ^ -1 = qn ^ -1.. * q2 ^ -1 * q1 ^ 1; где "^ 1" означает "обратный", для кватерниона единичной длины мы можем отменить знак "векторных" (x, y, z) компонент для обратной операции.
И хотя бы
p2 = T * p1; и p1 = T ^ -1 * p2
q2 = q2.conjugate();
сq2 = q2.conjugate() / (q2.length() * q2.length());
? РЕДАКТИРОВАТЬ: исправлена ошибка, это должно быть q2.length () в квадрате.