来自javax.vectmath.matrix3d

时间:2015-08-05 09:27:58

标签: java vecmath

很长一段时间后,我再次尝试使用JAVA。我正在使用vectmath包,我希望用旋转矩阵旋转3d矢量。所以我写道:

   double x=2, y=0.12;
   Matrix3d rotMat = new Matrix3d(1,0,0, 0,1,0, 0,0,1); //identity matrix
   rotMat.rotX(x); //rotation on X axis
   rotMat.rotY(y); // rotation on Y axis
   System.out.println("rot :\n" + rotMat); // diagonal shouldn't have 1 value on it

结果:

rot :
0.9928086358538663, 0.0, 0.11971220728891936
0.0, 1.0, 0.0
-0.11971220728891936, 0.0, 0.9928086358538663

不幸的是,它没有给我我的预期。这就像他忽略了第一次旋转(X左右)而只取第二次旋转(Y左右)。 如果我评论rotMat.rotX(x);它给了我相同的结果。

我怀疑打印错误或管理变量。

由于

1 个答案:

答案 0 :(得分:0)

方法rotXrotY设置/覆盖矩阵元素,因此您对rotY(y)的后续调用会取消对rotX(x)的调用。这样的事情应该有效:

Vector3d vector = ... //a vector to be transformed
double x=2, y=0.12;
Matrix3d rotMat = new Matrix3d(1,0,0, 0,1,0, 0,0,1); //identity matrix
rotMat.rotX(x); //rotation on X axis
rotMat.transform(vector);
rotMat.rotY(y); // rotation on Y axis
rotMat.transform(vector);
// the vector should now have both x and y rotation
// transformations applied
System.out.println("Rotated vector :\n" + vector);