gpt4 book ai didi

java - 获取两个四元数的角度问题

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:31 25 4
gpt4 key购买 nike

好的,所以我正在尝试获取两个四元数的角度,它几乎完美地工作,但是它从

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?

最佳答案

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

其次,你这里有一个错误:

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

acos 的结果 角度。不要乘以 2。

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

关于java - 获取两个四元数的角度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8725422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com