Итак, я понимаю, как повернуть вектор к точке:
Вектор A = (0, 0, -1)
Вектор B = (15, 164, 16)
Шаг 1: нормализация B
Шаг 2: Расчет угла между A и нормализованным B
Шаг 3: Расчет перекрестного произведения A и нормализованного B
Затем, вращение A вокруг осимы вычислили в шаге 3 угол, вычисленный в шаге 2 (в радианах), должны дать мне нормализованный вектор B.
Однако, пытаясь сделать это с помощью joml, я не получаю правильный результат.Вот мой код:
Vector3f vecA = new Vector3f(0.0f, 0.0f, -1.0f);
System.out.println("Vector A: " + vecA.toString(FORMAT));
Vector3f vecB = new Vector3f(0, 0.5f, 1.0f).normalize();
System.out.println("Vector B: " + vecB.toString(FORMAT));
float angle = (float) Math.acos(vecA.dot(vecB));
System.out.println("Angle between the two: " + angle + "(" + Math.toDegrees(angle) + "°)");
Vector3f rotationAxis = new Vector3f();
vecA.cross(vecB, rotationAxis);
Vector3f rotatedVector = new Vector3f();
vecA.rotateAxis(angle, rotationAxis.x, rotationAxis.y, rotationAxis.z, rotatedVector).normalize();
System.out.println("Rotated Vector: " + rotatedVector.toString(FORMAT));
Это приводит к следующему выводу:
Vector A: (0 0 -1)
Vector B: (0 0.44721 0.89443)
Angle between the two: 2.6779451(153.43495411905388°)
Rotated Vector: (0 0.82566 0.56416)
Разве повернутый вектор не должен быть равен выходу вектора B?