Прошу прощения за мое невежество по кватернионам (пытаясь выучить их, когда я набираю это). В контексте трехмерной графики, предположим, что у меня есть точка 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) компонентов для обратной операции.
И по крайней мере
р2 = т * р1;
а также
p1 = T ^ -1 * p2