Как получить поворот (угол Эйлера) между двумя трехмерными векторами? (чтобы сделать формат bvh)
Я конвертирую последовательность трехмерных координат в файл bvh. Я сделал ИЕРАРХИЮ, используя первый кадр (не Т-образную позу), и я хочу использовать остальные кадры для создания части ДВИЖЕНИЯ.
Я не знаю точного значения угла Эйлера, используемого в формате bvh. Например, когда есть два вектора v1 и v2, как показано на рисунке ниже
v1 = (X1, Y1, Z1) v2 = (X2, Y2, Z2)
Два вектора были одинаковой длины и повернуты от v1 до v2.
Как я могу получить вращение (угол Эйлера в формате bvh) между двумя векторами?
1 ответ
Я не знаю, отвечает ли это "значению" угла Эйлера в формате BVH, но в BVH углы Эйлера кости в данном кадре представляют собой поворот кости из базовой позиции, а не из предыдущего кадра. Базовая позиция - это СМЕЩЕНИЕ, определенное в ИЕРАРХИИ. Вам следует проверить форматы файлов захвата движения, объясненные Мередит и Мэддоком, они предлагают более глубокое обсуждение формата файла BVH.
Чтобы найти матрицу вращения для поворота вектора v1 на вектор v2, вы можете использовать уравнение, приведенное в ответе Юра ван ден Берга здесь. Затем вы можете восстановить углы Эйлера, используя алгоритм Шумейка, обратите внимание, что порядок вращения изменит уравнения. Но если базовая позиция вашей кости не лежит на v1, вам нужно вычислить поворот от ее базовой позиции, а не от v1.