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]
格式存储的,误导我半天没有找到问题所在 smile_confused.gif
 
当构建出了该矩阵后,则平移时左乘一个平移矩阵
[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

转载于:https://www.cnblogs.com/cai9911/archive/2007/07/02/803217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值