为何Apple Accelerate四元数相乘时顺序不影响结果?
四元数乘法结果相同的原因分析
轴不平行的两个旋转对应的四元数乘法本应是非交换的,你遇到的这种情况大概率是参数单位用错了:
simd_quatf的angle参数要求传入弧度,但你代码里写的20和-10明显是角度值。当你直接传入20弧度时,实际对应的旋转角度约为1146度(相当于转了3圈多),-10弧度约为-573度(转了1圈半多),这种超大角度的旋转组合出现了特殊的数值巧合,才会让两次乘法结果看起来完全相同。
按正常逻辑,绕X轴和Y轴的旋转四元数乘法不可能交换:你可以把角度转成弧度再试(比如20度转成Float.pi * 20 / 180,-10度转成Float.pi * (-10) / 180),此时a*b和b*a的虚部z分量符号会完全相反,结果差异非常明显。
另外补充:四元数的正负代表同一个旋转,但你这里的情况是结果完全相同而非正负相反,所以核心问题还是参数单位误用导致的异常数值情况。
内容的提问来源于stack exchange,提问作者johnbakers
相关产品推荐
相关产品推荐

