2013-12-07 2 views
0

Предположим, у меня есть 3 вектора, вперед = Вектор (1,0,0), up = Вектор (0,1,0), правый = Вектор (0,0,1).Вперед, вправо, вверх по векторам - Замените, но сохраните отношение вперед/вправо

Теперь я заменяю вектор вверх на что-то еще, но вперед и вправо должны оставаться в связи с новым вектором вверх, как и у старого.

например. если новый вектор вверх - вектор (1,0,0), форвард должен быть Vector (0, -1,0), а right все равно должен быть Vector (0,0,1).

Какую математическую формулу можно использовать для этого?

ответ

1

Вы не можете сделать это без оси вращения. Даже в своем упрощенном (оси выровненного) случае, когда один вектор изменяется в противоположное направление вам необходима ось вращения:

Оба (на самом деле Есть четыре)

forward(0,-1, 0), up(1,0,0), right(0, 0, 1) and 
    forward(0, 1, 0), up(1,0,0), right(0, 0,-1) 

являются допустимыми решениями.

Однако, имея поворот от вектора (0,1,0) к вектору (1,0,0), он (может) неявно определяет ось вращения (0, 0, 1) и угол PI/2. Следовательно, вы можете построить матрицу вращения и умножить эту матрицу на два других вектора.

+0

Векторы не обязательно ориентированы по оси. Для моих целей не имеет значения, какое решение я получаю, если они находятся на плоскости, ортогональной вектору вверх и перпендикулярно друг другу. Наверное, я могу использовать случайную ось вращения, но я до сих пор не знаю, что это за формула. – Silverlan