如何无需矩阵求逆计算对应矩阵以实现指定XYZ欧拉角目标旋转
旋转矩阵组合的参数求解问题
给定不可修改的固定旋转矩阵constant(绕XYZ轴分别旋转30°、20°、10°),需创建矩阵attempt,使其与constant前置或后置相乘后,得到绕XYZ轴分别旋转90°、-20°、-10°的目标矩阵target。
尝试直接为attempt设置额外旋转角(60°、-40°、-20°)并执行constant.mulLocal(attempt)后,结果与target不符;通过target.mul(constant.invert())得到attempt的方法有效,但会消耗资源,希望找到无需求逆即可直接设置rotationXYZ或用四元数rotate的正确旋转参数。
测试代码示例
Matrix4d target = new Matrix4d() .rotationXYZ(Math.toRadians(30 + 60), Math.toRadians(20 - 40), Math.toRadians(10 - 20)); // 对应旋转角:90°, -20°, -10° System.out.println(new Vector3d(8.0).mulProject(target)); // 输出:Target * V = (5.973 -10.687 6.489) Matrix4d constant = new Matrix4d() .rotationXYZ(Math.toRadians(30), Math.toRadians(20), Math.toRadians(10)); // 固定旋转矩阵A Matrix4d attempt = new Matrix4d() .rotationXYZ(Math.toRadians(60), Math.toRadians(-40), Math.toRadians(-20)); // 尝试的旋转矩阵B Matrix4d combined = constant.mulLocal(attempt, new Matrix4d()); // 计算组合矩阵C = B * A System.out.println(new Vector3d(8.0).mulProject(combined)); // 输出:Combined * V = (1.84 -10.747 8.55)
可行但耗资源的解法代码
Matrix4d attempt = new Matrix4d() .rotationXYZ(Math.toRadians(90), Math.toRadians(-20), Math.toRadians(-10)) .mul(constant.invert(new Matrix4d()));
内容的提问来源于stack exchange,提问作者James Goodall
相关产品推荐
相关产品推荐

