展开全部
在操作二32313133353236313431303231363533e58685e5aeb931333262383035维或三维的图形图像上,长期以来人们总结出了一些常用的变换矩阵,这些矩阵就像公式和定理一样被开发人员使用,楼主可以把这些矩阵当成公式来记忆,就像我们小时候背加法、乘法口诀一样。
如果楼主想了解得更深入一些,请往下看:
[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ]
[ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ]
[ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
上面的式子是jdk文档中复制过来的,就是变换时的运算过程,也就是说变换后的坐标x'、y'是由一个3*3的矩阵与原坐标x、y相乘得出的,其中的m00~m12就是AffineTransform构造方法中的六个参数,另外,式子中的最后一行是固定的。
矩阵乘法就不用说了吧,最后得出的结果就是上式中的最后一列,可能写成下面这样会更容易理解:
x' = m00x + m01y + m02
y' = m10x + m11y + m12
看出什么了吗?其实这就是二维平面直角坐标系中的两个很简单的二元一次方程而已,方程定义的就是横纵坐标变换的规则。
以水平翻转为例,水平翻转是以图形/图像的垂直中线为轴来翻转的,因此任何一个点(x,y)变换后的坐标应该是y坐标不变,x坐标变为-x+width-1,即(-x+width-1,y),之所以减1是因为垂直中轴上的点不应该改变。
理解了上面的变换过程之后,将结果带入上面的两个二元一次方程,可以得出
m00=-1、m01=0、m02=width-1
m10=0、m11=1、m12=0
正好是你给的代码中的六个值(AffineTransform构造方法中的参数顺序为m00、m10、m01、m11、m02、m12)
其他几个变换道理是一样的