Я пытаюсь использовать Java3D для поворота вектора. Моя цель - создать преобразование, которое сделает вектор параллельным оси Y. Для этого я рассчитал угол между исходным вектором и идентичным вектором, за исключением того, что он имеет значение z, равное 0 (исходный x, исходный y, 0 для z-значения). Затем я проделал то же самое для оси y (оригинал x, 0 для значения y, оригинал z). Затем я использовал каждый угол, чтобы создать два объекта Transform3D, умножить их вместе и применить к вектору. Мой код выглядит следующим образом:
Transform3D yRotation = new Transform3D();
Transform3D zRotation = new Transform3D();
//create new normal vector
Vector3f normPoint = new Vector3f (normal.getX(), normal.getY(), normal.getZ());
//****Z rotation methods*****
Vector3f newNormPointZ = new Vector3f(normal.getX(), normal.getY(),0.0F);
float zAngle = normPoint.angle(newNormPointZ);
zRotation.rotZ(zAngle);
//****Y rotation methods*****
Vector3f newNormPointY = new Vector3f(normal.getX(),0.0F, normal.getZ());
float yAngle = normPoint.angle(newNormPointY);
yRotation.rotY(yAngle);
//combine the two rotations
yRotation.mul(zRotation);
System.out.println("before trans normal = " +normPoint.x + ", "+normPoint.y+", "+normPoint.z);
//PRINT STATEMENT RETURNS: before trans normal = 0.069842085, 0.99316376, 0.09353002
//perform transform
yRotation.transform(normPoint);
System.out.println("normal trans = " +normPoint.x + ", "+normPoint.y+", "+normPoint.z);
//PRINT STATEMENT RETURNS: normal trans = 0.09016449, 0.99534255, 0.03411238
Я надеялся, что преобразование выдаст значения x и z равные или очень близкие к 0. Хотя логика имеет смысл для меня, я явно что-то упускаю ..