绕空间任意轴的旋转变换:先将图形随直线(旋转轴)一起移动和旋转并使直线与某一坐标轴重合,再将图形绕直线进行旋转变换,最后将旋转变换后的图形和直线一起作相反的旋转和移动并使直线回到原来位置。具体变换步骤是:
1、平移使点(x1,y1,z1)位于坐标原点,变换矩阵是:
| |
2、绕x轴旋转,使直线处在x-z平面上。为此,旋转角应等于直线在y-z平面上的投影与z轴夹角。因此投影线与z轴夹角θ的旋转变换矩阵是:
、
3、绕y轴旋转,使直线与z轴重合。如图所示,直线与z轴夹角-φ的旋转变换矩阵是:
| |
| |
、
4、进行图形绕直线即绕z轴旋转,旋转矩阵是:
| |
5、使直线回到原来位置,结果图形即为原图形绕指定直线旋转变换后的图形。
直线回到原来位置需要进行(3)~(1)的逆变换,其中:
图形绕空间任意轴旋转的总变换矩阵是
H = T·Rx·Ry·Rz·Ry-1·Rx-1·T -1 |
我们知道绕坐标轴旋转的变换矩阵为:
(1)绕Z轴旋转 x' = xcost - ysint
y' = xsint + ycost
z' = z
(2)绕X轴旋转 y' = ycost - zsint
z' = ysint + zcost
x' = x
(3) 绕Y轴旋转 z' = zcost - xsint
x' = zsint + xcost
y' = y
假设让一个向量绕x轴旋转t度,我们知道绕x轴旋转的旋转矩阵如下:
1 0 0 0
0 cost sint 0
0 -sint cost 0
0 0 0 1
那么,它是怎么来的呢?
现在假设我们想让P1绕x轴旋转t度到达P2。我们沿着x轴指向原点方向观察时,情况如下:
P0是当P1与y轴重合时的向量,假设P0旋转至P1为r度,那么很明显,P1的值为y1 = r*cosr,z1 = r*sinr。
而现在我们是要把P1旋转t度至P2,那么同理,P0旋转r+t度也至P2,那么P2的值为y2 = r*cos(r+t),z2 = r*sin(r+t)。
我们把P2的值展开看看,y2 = r*(cosr*cost - sinr*sint),z2 = r*(sinr*cost + cosr*sint),因为P1的值y1 = r*cosr,z1 = r*sinr,所以cosr = y1/r,sinr = z1/r,代入P2的值,得:
y2 = r*(y1/r * cost - z1/r * sint ) = y1*cost - z1*sint
z2 = r*(z1/r * cost + y1/r * sint ) = y1*sint + z1*cost
即得旋转矩阵:
1 0 0 0
0 cost siny 0
0 -sint cost 0
0 0 0 1
其余的旋转矩阵推导过程相同。