Java图像变换类 - AffineTransform
很多人都研究过GL的Animation编辑器,但是对其XML数据文件中Sprite的m00 m01 m02 m10 m11 m12我想并不是每个人都能弄的明白,其实他们是Java的图像变换类AffineTransform的6个参数。
AffineTransform是J2SE中非常重要的专门处理2D图像仿射变换的类,尤其在游戏工具编写中经常会用到。该类的构造函数有6个参数m00 m10 m01 m11 m02 m12,会构造一个矩阵
[m00 m01 m02]
[m10 m11 m12]
[ 0 0 1 ]
注意这6个参数的顺序,CoCoMo曾经因为搞错了参数的顺序而得出了错误的结果,最郁闷的是还被jedi忽悠说曾经有种Identity矩阵不是以
[1 0 0]
[0 1 0]
[0 0 1]
格式存储的,误导我半天没有找到问题所在。
当构建出了该矩阵后,则平移时左乘一个平移矩阵
[1 0 tx]
[0 1 ty]
[0 0 1]
反转X时左乘一个缩放矩阵
[-1 0 0]
[ 0 1 0]
[ 0 0 1]
反转Y时左乘一个缩放矩阵
[1 0 0]
[0 -1 0]
[0 0 1]
旋转时左乘一个旋转矩阵
[cos(theta) -sin(theta) 0]
[sin(theta) cos(theta) 0]
[ 0 0 1]
然后将该矩阵setTransform到Graphics2D里即可画图了。
要想得到变换后的数据,调用getMatrix得到一个double数组matrix,matrix[4]即X轴偏移量,matrix[5]即Y轴偏移量。假如matrix[0] < 0即反转了X,matrix[3] < 0即反转了Y。
double degree = Math.toDegrees(Math.asin(matrix[1]));
if(degree < 0)
degree += 360;
即可得到旋转的角度。
原文:http://j2medev.spaces.live.com/blog/cns!8D09CFF9FE06ED5D!1065.entry
原文:http://j2medev.spaces.live.com/blog/cns!8D09CFF9FE06ED5D!1065.entry