• 绕任意轴旋转的变换矩阵的推导


    本文参考自http://hi.baidu.com/lsjsuper/blog/item/4ca2c2773584ef08b051b9bd.html,并进行了补充说明与完善,目的在于帮助大家更好的理解推导过程^-^!大家可以看完原文再看本文,也可以直接看本文,谢谢!

    推导过程中我们使用的是左手坐标系。

    现在,我们假设3D空间中有一点P要绕任意轴A进行旋转,如图:

                                     图1

    首先我们将P看成从原点出发的自由向量,将其分解为平行于轴A与垂直于轴A的分量A1A2的形式,如图:

                                     图2

    向量加法的几何解释为: u + v = 将向量v平移,使其始端与u的末端重合,u + v就是自向量u的始端指向平移后的向量v的末端的向量。

    所以,由图2可以知道:

     (公式1)

    现在,我们先来求A1。我们知道,一个向量 = 该向量的模 * 该向量对应的单位向量。所以(式1)

    假设A1与点P之间的夹角为θ,根据图2,可以知道(式2)。所以合并式1,式2后我们可以得到

    由于A1向量是点P相对于A轴的平行投影,所以A1的单位向量与A的单位向量是相同的,于是,我们得到

    因为一个向量的单位向量 = 该向量 / 该向量的模,所以,此时,我们把A当做单位向量来对待,那么A的模就是1。所以,(公式2)

    而根据公式1可求得(公式3)

    由于平行分量A1在旋转过程中是不会变的,所以关键就在于垂直分量A2。现将P旋转θ度后效果如图:

               图3: P绕A轴旋转θ度,P'为旋转后的点

    根据上文提到的向量加法几何解释,我们知道:

    (公式4)

    A1我们上面已经求过了,现在只要求出A3,那么就能求出旋转后的点P'。

    因为A2到A3的旋转是在垂直于A轴平面内进行的,所以可以将A3分解为A2与A2逆时针方向旋转90度的向量A4上的两个分量的形式。如图:

                                     图4

    我们先来求A4。根据图2,我们知道(公式5)

    而A4是A2逆时针旋转90度而来的向量,所以A4的模 = A2的模。所以(公式6)

    根据图4,我们可以发现(公式7)。这样,A4与A4的模都求完了。

    接下来就要求A3了,我们用一个垂直于A的平面图来看一下,这样更直接,如图:

                         图5

    A2'与A4'分别为A3在A2与A4上的分量。

    根据上文提到的向量的几何解释,我们知道(公式8)
    并且由于一个向量 = 该向量的模 * 该向量对应的单位向量,我们可以求得A2'和A4':

    (公式9)

    (公式10)

     因为A3,A4都是A2旋转得到的向量,所以它们3者的模相同,所以我们可以简化公式9和公式10,得到:

    (公式11)

    (公式12)

    现在,我们可以总结了。首先,将我们求得的各项结果代入公式4,得到:

    将上面的式子合并整理后,得到:

    (公式13)

    现在,我们假设如下:

    我们来把上面总结整理的式子写入矩阵,首先,写第一项:

    (公式14)

    第二项:

     (公式15)

    第三项:

     (公式16)

    最后,把3项代入公式13,即得:

    后,我们求得了绕任意轴旋转的变换矩阵:

     

  • 相关阅读:
    VC++6.0编译环境介绍
    (六)flask搭建博客系列之HTTPTokenAuth
    (五)flask搭建博客系列之LoginManager
    (四)flask搭建博客系列之FlaskForm
    (三)flask搭建博客系列之BootStrap
    (二)flask搭建博客系列之SQLAlchemy
    (一)flask搭建博客系列之环境项目搭建
    (十)python语法之图像处理
    (九)python语法之机器学习
    (八)python语法之Tkinter
  • 原文地址:https://www.cnblogs.com/qwcbeyond/p/2561521.html
Copyright © 2020-2023  润新知