Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 求两个四元数的角的问题_Java_Math_Matrix_Lwjgl_Quaternions - Fatal编程技术网

Java 求两个四元数的角的问题

Java 求两个四元数的角的问题,java,math,matrix,lwjgl,quaternions,Java,Math,Matrix,Lwjgl,Quaternions,好的,我试着得到两个四元数的角度,它几乎可以完美地工作,但它从 evec angle: 237.44999653311922 evec angle: 119.60001380112993 我也不明白为什么,为了我的生命。(注意:evec是一个旧的变量名,只是保留在打印中) 无论如何,我的代码如下: FloatBuffer fb = BufferUtils.createFloatBuffer(16); // get the current modelview matrix GL11.glGet

好的,我试着得到两个四元数的角度,它几乎可以完美地工作,但它从

evec angle: 237.44999653311922
evec angle: 119.60001380112993
我也不明白为什么,为了我的生命。(注意:
evec
是一个旧的变量名,只是保留在打印中)

无论如何,我的代码如下:

FloatBuffer fb = BufferUtils.createFloatBuffer(16);

// get the current modelview matrix
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, fb);
Matrix4f mvm = new Matrix4f();
mvm.load(fb);

Quaternion qmv2 = new Quaternion();
Matrix4f imvm = new Matrix4f();
Matrix4f.invert(mvm, imvm);
qmv2.setFromMatrix(imvm);
qmv2.normalise();

Matrix3f nil = new Matrix3f();
nil.setIdentity();
Quaternion qnil = new Quaternion();
qnil.setFromMatrix(nil);
qnil.normalise();

float radAngle = (float)(2.0 * Math.acos(Quaternion.dot(qmv2, qnil)));

System.out.println("evec angle: " + Math.toDegrees(radAngle));

如何使它停止从237跳到119,并继续上升到360度?

首先,两个四维向量(=四元数)之间的角度在几何上对你意味着什么?你可以计算,但结果可能没有意义。也许你在寻找两个四元数所代表的旋转轴之间的角度

其次,这里有一个错误:

float radAngle = (float)(2.0 * Math.acos(Quaternion.dot(qmv2, qnil)));
                         ^^^^^
acos
的结果是角度。不要乘以2


第三,3D或4D空间中两个矢量之间的角度永远不能大于180°。在一个平面上它可以,因为该平面施加了一个方向。在3D空间中,你必须将任意方向定义为“向上”,以获得大于180°的角度。

我现在对四元数的数学不是很熟悉,但事实上,你获得的角度大于180°对我来说有点可疑——这表明逻辑上有问题。两个矢量之间的角度不可能大于180°。。。