假设要把矢量norm旋转到z轴
第一步,先把矢量绕x轴在y-z平面内旋转,使得矢量的y为0,矢量处于x-z平面内
第二步,再把矢量绕y轴在x-z平面内旋转,使得矢量的x为0,转到和z轴重合
第三步,数据总体可以绕z轴旋转,调整在x-y平面中的分布
from scipy.spatial.transform import Rotation as Rnorm=[xmean,ymean,zmean]print(norm)# 根据矢量的y和z分量,计算出需要绕x旋转的角度。r1=np.arcsin(norm[1]/np.sqrt(norm[1]**2+norm[2]**2))print(r1)rot1 = R.from_euler('x', r1, degrees=False).as_matrix() # 获得旋转矩阵norm= np.dot(rot1,norm) # 进行旋转print(norm) # 检查是否y坐标为0# 根据矢量的y和z分量,计算出需要绕y旋转的角度。r2=np.arccos(norm[2]/np.sqrt(norm[0]**2+norm[2]**2))print(r2)rot2 = R.from_euler('y', r2, degrees=False).as_matrix() # 获得旋转矩阵norm= np.dot(rot2,norm) # 进行旋转print(norm) # 检查是否x坐标为0rtot=np.dot(rot2,rot1) # 获得总旋转矩阵norm=[xmean,ymean,zmean]norm= np.dot(rtot,norm) # 应用总旋转矩阵print(norm) # 再次验证是否x和y都为0# 后续还可以绕着z轴旋转,调整x-y平面的形状。r3=np.pi/6print(r3)rot3 = R.from_euler('z', r3, degrees=False).as_matrix()norm= np.dot(rot3,norm)print(norm)rtot=np.dot(rot3,rtot) # 获得总旋转矩阵
