Найти следующую трехмерную точку с учетом начальной точки, кватерниона ориентации и пройденного расстояния - PullRequest
0 голосов
/ 22 января 2020

Какую формулу мне нужно использовать, чтобы найти вторую заданную трехмерную точку (P1):

  1. Первая точка P0 = [x0, y0, z0]
  2. An ориентационный кватернион Q0 = [q0, q1, q2, q3]
  3. пройденное расстояние S

Я предполагаю, что пройденное расстояние S нужно разделить на составляющую X , Y и Z компоненты. Есть ли простой способ сделать это с помощью кватернионов?

1 Ответ

0 голосов
/ 23 января 2020

Компоненты вектора направления (прямого вектора):

x = 2 * (q1*q3 + q0*q2)
y = 2 * (q2*q3 - q0*q1)
z = 1 - 2 * (q1*q1 + q2*q2)

Эта формула рассчитывается из матрицы Quaternion-to-Matrix (ниже) с умножением на вектор (0,0,1).

Нормализовать D=(x,y,z), если он не является единицей, и вычислить P_New.x= P0.x + S * D.x и другие компоненты.


Чтобы получить вектор ориентации вверх и влево (возможно, ваша ориентация относится к другая ориентация базового кадра - OX или OY (вперед), используйте другие столбцы матрицы, указанной ниже:

Ссылка: Умножение кватернионов и умножение ортогональных матриц могут использоваться для представления поворота. Если кватернион представлен qw + i qx + j qy + k qz, то эквивалентная матрица для представления того же вращения:

1 - 2*qy2 - 2*qz2   2*qx*qy - 2*qz*qw   2*qx*qz + 2*qy*qw
2*qx*qy + 2*qz*qw   1 - 2*qx2 - 2*qz2   2*qy*qz - 2*qx*qw
2*qx*qz - 2*qy*qw   2*qy*qz + 2*qx*qw   1 - 2*qx2 - 2*qy2
...