1.定义

涉及两个坐标系:物体坐标系,世界坐标系

内旋:instrinsic rotation相同于欧拉角:euler angles(后面都说3轴转,不说2轴转),定义为每一次旋转轴都为物体坐标系;

外旋:extrinsic rotation 相同于定角:fixed angles,定义为每次旋转轴都为世界坐标系;

2.性质

为方便:后面都讲旋转轴顺序为x->y->z;用来说明的点的世界坐标为X(x,y,z),为了渲染,我们需要知道该点旋转后在世界坐标系中的位置;

内旋和外旋等价性为:xyz外旋 RzRyRx 和 zyx内旋RzRyRx之间差一个负号

性质1:内旋后点位x,y,z,这个点在世界坐标系中的位置为Rx(Ry(Rz*X)))=RxRyRz*X(内旋和外旋等价性):内旋不改变点在物体自身坐标系中的坐标为(x,y,z),求物体自身坐标系(x,y,z)在世界坐标系中的坐标?

绕z轴旋转后点在物体坐标系中为X=(x,y,z),这个点可以看成是世界坐标系中的(x,y,z)绕z轴得到,即Rz*X,同理为 RxRyRz*X;再次旋转设绕y轴,则需要先把物体坐标系中的(x,y,z)转到上一次旋转前的坐标系(当前的世界坐标系),IRyI*X,则最后位置为 (RxRyRz)*(IRyI*X),即最后结果为(RxRyRz*IRyI)*X

 这一块比较难理解:原理是,从当前位置内旋,等价于在最初物体坐标系和世界坐标系重合的时候,绕着轴进行外旋,再按照原来旋转回来;用下图来说明,上下两种旋转方式是等价的,

R_0为上一次旋转,R_mat为当前旋转

R_0=euler2rotation(theta_t),R_mat=euler2rotation(theta_(t+1)-theta_t)

性质2:外旋对应左乘,外旋后点为:RzRyRx*X,再次旋转设绕y轴,旋转矩阵为IRyI(I是单位阵),则最后位置为(IRyI)*(RzRyRx*X),即最后结果为(IRyI*RzRyRx)*X,即旋转为np.dot(R_mat,R_0)

性质3:内旋对应右乘,(RxRyRz*IRyI)*X,即旋转为 np.dot(R_0,R_mat)

3.实际使用

ver_lst=np.transpose(np.dot(R_mat,ver_lst.T))+T_mat

参考:

1.https://blog.csdn.net/c20081052/article/details/89479970?spm=1001.2014.3001.5506​​​​​ 

2.

Logo

鸿蒙生态一站式服务平台。

更多推荐