Поиск математического алгоритма для расчета вектора - PullRequest
0 голосов
/ 13 января 2020

Я дал указания трехмерных объектов, например:

Direction1:

X-Vector:

X_X: 1

X_Y: 0

X_Z: 0

Y-вектор:

Y_X: 0

Y_Y: 1

Y_Z: 0

Z-Vector:

Z_X: 0

Z_Y: 0

Z_Z: 1

Direction2:

X-Vector:

X_X: 0

X_Y: 0

X_Z: 1

Y-вектор:

Y_X: 0

Y_Y: -1

Y_Z: 0

Z-вектор:

Z_X: 1

Z_Y: 0

Z_Z : 0

Это выглядит так (Направление1 слева, Направление2 справа):

enter image description here

Мне нужно отфильтровать информация о вращении от направления 1 к направлению 2 теперь. Есть алгоритмы fe, которые вычисляют вращение вектора от 1 до вектора 2, но здесь у меня есть 3 вектора, и я не знаю, как я могу вычислить угол поворота Эйлера здесь.

Я думал о суммировании 3 векторов 1, например, изображение 1 будет (1,1,1), а pic2 будет (1, -1,1), но проблема здесь в том, что информация, на которую указывает топор, в каком направлении теряется. У кого-нибудь есть идея?

1 Ответ

2 голосов
/ 13 января 2020

Кажется, что вы хотите найти аффинное преобразование, которое преобразует один триплет некомпланарных векторов в другой триплет.
Создайте матрицы A и B и неизвестную матрицу вращения M .
Здесь вектор столбца, такой как x1 y1 z1, является вашим X_X X_Y X_Z и т. Д.

 M * A = B

    |x1 x2 x3 0|     |x1` x2` x3` 0|
M * |y1 y2 y3 0| =   |y1` y2` y3` 0|
    |z1 z2 z3 0|     |z1` z2` z3` 0| 
    |1  1  1  1|     |1   1   1   1| 

найти обратную матрицу InvA для A и умножим обе стороны на IA

M * A * InvA = B * InvA
M * |1 |= B * InvA
M = B * InvA

Теперь у вас есть матрица M , необходимая для преобразования векторов.

Вращение примерно на 5, 0,0

      |1 0 0 -5|        |1 0 0 5|
M' =  |0 1 0  0| * M *  |0 1 0 0|
      |0 0 1  0|        |0 0 1 0|
      |0 0 0  1|        |0 0 0 1|
...