参考: http://wenku.baidu.com/view/193f8a8fbceb19e8b8f6baf6.html
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)
常用的几何变换矩阵:平移(translate),旋转(rotate),缩放(scale),以及简单的复合,如绕指定点旋转、缩放
关于矩阵复合时的乘法参考 http://blog.csdn.net/chunyexiyu/article/details/44671737 - Matrix矩阵乘法
二维平移 vec(Tx, Ty)
1 0 Tx
0 1 Ty
0 0 1
二维旋转:
cos@ -sin@ 0
sin@ cos@ 0
1 1 1
二维放大
Sx 0 0
0 Sy 0
0 0 1
绕着顶点旋转(Xr, Yr)
cos@ -sin@ Xr(1-cos@) + YrSin@
sin@ cos@ Yr(1-cos@) – XrSin@
0 0 1
(变换步骤:平移到原点->旋转->平移恢复)
绕指定点放大(Xr,Yr)
Sx 0 Xr(1-Sx)
0 Sy Yr(1-Sy)
0 0 1
(变换步骤:平移到原点->缩放->平移恢复)
平移Vec(Tx, Ty, Tz)
1 0 0 Tx
0 1 0 Ty
0 0 1 Tz
0 0 0 1
绕Z轴旋转
cos@ -sin@ 0 0
sin@ cos@ 0 0
0 0 1 0
0 0 0 1
绕X轴旋转
1 0 0 0
0 cos@ -sin@ 0
0 sin@ cos@ 0
0 0 0 1
绕Y轴旋转
cos@ 0 sin@ 0
0 1 0 0
-sin@ 0 cos@ 0
0 0 0 1
一般绕指定点(Xr, Yr, Zr)的三维旋转变幻步骤
1. 平移到原点
2. 旋转到某一坐标轴X|Y|Z
3. 绕坐标轴旋转
4. 旋转恢得-2的逆矩阵处理
5. 平移恢复-1的逆矩阵处理
三维缩放
Sx 0 0 0
0 Sy 0 0
0 0 Sz 0
0 0 0 1
绕任意点(Xr, Yr, Zr)为中心缩放
Sx 0 0 Xr(1-Sx)
0 Sy 0 Yr(1-Sy)
0 0 Sz Zr(1-Sz)
0 0 0 1
(步骤:平移到原点->缩放->平移恢复)
错切,例如把一个矩阵错切为一个平行四边形
x为依赖轴
1 0 0 0
b 1 0 0
c 0 1 0
0 0 0 1
y为依赖轴
1 a 0 0
0 1 0 0
0 c 1 0
0 0 0 1
z轴为依赖轴
1 0 a 0
0 1 b 0
0 0 1 0
0 0 0 1
复合
1 a1 a2 0
b1 1 b2 0
c1 c2 1 0
0 0 0 1
对应OpenGL的几何变换函数
glTranslate/glRoate/glScale/glLoadIdentity/glLoadMatrix/glMarixMode
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)
原文:http://blog.csdn.net/chunyexiyu/article/details/45251719