空间直角坐标转换之仿射变换 一、仿射变换 仿射变换是空间直角坐标变换的一种,它是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直线”和“平行性”,其可以通过一系列的原子变换的复合来实现,包括平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)
此类变换可以用一个3×3 的矩阵来表示,其最后一行为(0, 0, 1)
该变换矩阵将原坐标(x, y)变换为新坐标(x', y'),这里原坐标和新坐标皆视为最末一行为(1)的三维列向量,原列向量左乘变换矩阵得到新的列向量: [x'] [m00 m01 m02] [x] [m00*x+m01*y+m02] [y'] = [m10 m11 m12] [y] = [m10*x+m11*y+m12] [1 ] [ 0 0 1 ] [1] [ 1 ] 如果将它写成按旋转、缩放、平移三个分量的复合形式,则其代数式如下: x’ = m00*x+m01*y+m02; y’ = m10*x+m11*y+m12; 其示意图如下: 几种典型的仿射变换: 1
public static AffineTransform getTranslateInstance(double tx, double ty) 平移变换,将每一点移动到(x+tx, y+ty),变换矩阵为: [ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ] (译注:平移变换是一种“刚体变换”,rigid-body transformation,中学学过的物理,都知道啥叫“刚体”吧,就是不会产生形变的理想物体,平移当然不会改变二维图形的形状
同理,下面的“旋转变换”也是刚体变换,而“缩放”、“错切”都是会改变图形形状的
public static AffineTrans