为什么.apply不像我期望的那样应用旋转?

问题描述

(Pdb) R.from_matrix(R_xy).apply(centered_points[599,:])
array([-0.02405325,0.00502445,0.06892317])
(Pdb) (R_xy @ centered_points[599,:].T).T
array([-0.02449478,0.00437224,0.06888685])

我希望第二行正确地对centered_points进行旋转。 centered_points是1024、3的向量。视觉上,当我检查结果时,#2是正确的,而Scipy是错误的。有什么作用?

解决方法

我发现了这个问题:我是从非完全正交向量生成R_xy的。这会使rot.apply混淆所有计算

,

我无法重现此行为:

from scipy.spatial.transform import Rotation

rot = Rotation.from_quat((0.7,0.6,0.5,0.4))
# array([[ 0.03174603,0.34920635,0.93650794],#        [ 0.98412698,-0.17460317,0.03174603],#        [ 0.17460317,0.92063492,-0.34920635]])

x = [3,2,1]
y1 = rot.as_matrix() @ x
# array([1.73015873,2.63492063,2.01587302])
y2 = rot.apply(x)
# array([1.73015873,2.01587302])