Допустим, вы хотите, чтобы повернуть в сторону В.
Возьмите крест продукт Axb = C и нормализовать его.
Теперь разбить на две составляющие, одна из которых параллельна C и один нормальный:
...
Теперь построим вектор нормали к А и С (с правом смысле):
...
Теперь вы можете построить повернутый вектор:
...
EDIT
Я чувствую себя идиотом. Правильно (и более простой) вывод является
F = C x A
G = cos(theta) A + sin(theta) F
EDIT:
Это работает простой геометрии. C нормаль к плоскости, содержащей A и B. F находится в плоскости и нормаль к A. Таким образом, любой вектор на плоскости является линейной комбинацией A и F; т. е. любой вектор Z в плоскости может быть построен как Z = aA + bF, где a и b - числа, и любая такая сумма будет в плоскости. F также имеет такую же величину, как A, так что если мы строим
G = cos(theta) A + sin(theta) F
что мы получаем вектор с такой же величины, но отделена от А на угол тета. (Это не сразу видно, но если вы поиграйте с ним немного, вы увидите, что это работает.)
Используя ваш пример:
A = (2, 3, 3) (magnitude = 4.69)
B = (2, -3, -2)
C = AxB = (3, 10, -12) (magnitude = 15.906)
Now normalize:
C = (0.189, 0.629, -0.754) (magnitude = 1.0)
F = CxA = (4.149, -2.075, -0.692) (magnitude = 4.69)
theta = 20 degrees
G = cos(theta) A + sin(theta) F = (3.299, 2.109, 2.583) (magnitude = 4.69)
G находится в той же плоскости, что А и В (нормаль к C), а угол между A и G составляет 20 градусов. (Угол между A и B составляет 124,7 градуса, угол между G и B составляет 104,7 градуса.)
Где находится космический корабль?Для вычисления поворота требуется точка начала координат. – ProdigySim
no, не для того, чтобы повернуть вектор –