java 水平翻转_java 图像翻转 。。求解释 代码!!

展开全部

在操作二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)

其他几个变换道理是一样的

6dd2ab06032155518f04e016bbe1002b.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值