java – 获取两个四元数角度的问题
发布时间:2020-12-15 02:30:26 所属栏目:Java 来源:网络整理
导读:好吧,所以我试图获得两个四元数的角度,它几乎完美无缺,但随后它从 evec angle: 237.44999653311922evec angle: 119.60001380112993 而且我无法弄清楚为什么对我的生活. (注意:evec是一个旧的变量名,只留在印刷品中) 无论如何,这是我的代码: FloatBuffer fb
好吧,所以我试图获得两个四元数的角度,它几乎完美无缺,但随后它从
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°的角度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |