Вращение Эйлера вектора направления - PullRequest
4 голосов
/ 30 мая 2010

Я определил объект в трехмерном пространстве со значениями положения, поворота и масштаба (все они определены как трехмерные векторы). Он также имеет векторы направления вверх и вперед. Когда я вращаю объект, мне нужно, чтобы эти векторы направления вращались вместе с ним.

Если предположить, что мой вектор роста равен (0, 1, 0), а мой прямой - (0, 0, 1) при нулевом повороте, как я могу этого достичь?

Ответы [ 2 ]

4 голосов
/ 30 мая 2010

Вы можете умножить текущий вектор на матрицу вращения ( Запись в Википедии , в разделе «Основные вращения»).Если вращение происходит на 2 или более осей, просто умножьте на соответствующие матрицы.Например, если вы поворачиваете на 30 градусов по оси X и на 60 по оси Y, умножьте на

|    1         0          0     |
|    0    cos(pi/6)  -sin(pi/6) |
|    0    sin(pi/6)   cos(pi/6) |

, а затем на

| cos(pi/3)    0      sin(pi/3) |
|    0         1          0     |
| -sin(pi/3)   0      cos(pi/3) |
1 голос
/ 30 мая 2010

Просто поверните каждый из этих векторов на тот же угол, с которым вращается ваш объект. Допустим, вы вращаетесь вокруг оси z (то есть (0, 0, 1))

Уравнения будут:

x' = x cos(angle) + y sin(angle)
y' = -x sin(angle) + y cos(angle)
z' = z

Ваш вектор "вверх" равен (0, 1, 0), таким образом;

x' = 0 * cos(angle) + 1 * sin(angle) = sin(angle)
y' = -0 * sin(angle) + 1 * cos(angle) = cos(angle)
z' = 0

Ваш вектор "вперед" равен (0, 0, 1), поэтому:

x' = 0
y' = 0
z' = 1

Он не будет вращаться, поскольку мы вращались вокруг оси z, которая соответствует вашему вектору форвардов

...