从内旋到外旋(一)--例说相似变换 目录场景步骤1步骤2结论得出结论在使用OpenGL编程的过程里难免要处理刚体转动的问题。而处理此类问题往往要用到欧拉角。欧拉角的转动分为3步进动、章动、自转见前面的博客阐述欧拉角概念-CSDN博客而且都是绕着附着于刚体的内部坐标系的轴转动所以转动的第二、第三步里的转轴指向是受第一步转动影响的。所以处理这类问题最棘手的点在于虽然一开始附着于刚体的内部坐标系或者叫刚体坐标系与世界坐标系或者叫外部坐标系、固定坐标系重合。但是完成进动也就是第一步以后内部坐标系就不再与世界坐标系重合了这就让后面的转动很难被描述清楚。假如能够把绕内部坐标轴的转动等价为绕世界坐标系的转动问题就变得容易处理的多因为世界坐标系是固定的。我们把绕内部坐标系的转轴做的旋转叫做内旋把绕着外部坐标系的坐标轴的旋转叫做外旋。神奇的是利用线性代数知识我们可以通过相似变换把内旋转换成效果等价的外旋。从一个例子入手介绍什么是相似变换。场景假设一个人站在潜水艇的中央目光直视前方。而潜水艇坐标系与世界坐标系重合。此时人的视线用一个世界坐标系的矢量表示步骤1人移动目光到别处让他注视潜艇里某个固定位置。这相当于矢量做了一个旋转变换LL既等于内部坐标系下的旋转变换又等于世界坐标系下的旋转变换因为此时潜水艇坐标系与世界坐标系重合。假设变换后矢量变为也是世界坐标系下的矢量,则 L *(1)步骤2保持人的视线在潜艇内部不动继续注视潜艇内同一个位置。让潜艇转动。那么潜艇将经历旋转变换用矩阵R表示。显然在世界坐标系下人的视线也旋转了而且这个旋转的操作同样用R表示。用表示潜艇旋转后人的视线在世界坐标系下的矢量。 R *换言之*(2)假如此时人仍然平视的话平视矢量将变为 R *换言之*(3)把(2)3代入(1)* L **两边同时乘以R R * L **结论已知两个矢量在内部坐标系里的表示是(a1,a2,a3,.....)--这里指的就是,(b1,b2,b3......)--这里指的就是且已知(a1,a2,a3,.....)可以通过与矩阵L的旋转变换乘法得到(b1,b2,b3......)也即那么这两个矢量在世界坐标系的表示(c1,c2,c3,.....)--这里指的就是,和(d1,d2,d3......)--这里指的就是之间也可以通过旋转矩阵乘法完成旋转变换且 R * L *R是局部坐标系相对于世界坐标系的转动矩阵是其逆矩阵。形如 R * L *的变换就是相似变换。