matrix矩阵变换

在CSS3转换以及HTMAL5画布里均有元素或图形的转换,除了基本的移动、缩放、转动、拉伸还有一个能包含上述所有转换方法的matrix方法,在HTML5的canvas里用的是transform,不管是CSS3还是HTML5,其转换的本质是一样的,不同的是CSS3里默认坐标原点在中间,HTML5默认坐标在左上角,但都有对应方法可以移动坐标轴。下面就总结如何运用matrix方法进行转换。

虽然在CSS3里是对元素进行操作,但本质上是对坐标系的变换,元素上每个点都有对应的坐标,所以通过对坐标系的移动、拉伸就是对坐标上的元素移动和拉伸。而构成坐标系的是原点和x轴,y轴,所以通过对这三个量进行操作就能变换坐标系。值得注意的是这里的y轴朝下,和数学上的方向相反。

原点的坐标是(0,0),x轴上的点坐标是(x,0),y轴上点的坐标是(0,y),通过对这三个点进行变换则可以对坐标轴进行变换,把这三个点的x相加即可得到一个点的横坐标,把y相加即可得到纵坐标。下面先看基本变换是如何实现的。

1、 移动
移动即时对原点的移动,所以原点坐标由(0,0) ( x0 , y0 ),而x和y上的点没变,所以移动后的点由[(x,0),(0,y),(0,0)]变换为[(x,0),(0,y),( x0 , y0 )]。再来看矩阵如何变换,对于(a,b,c,d,e,f),在矩阵中表示为: ab0cd0ef1 ,乘以 xy1 ,结果为 ax+cy+ebx+dy+f0+0+1 ,即把每个点的横坐标分别乘以x,y,1相加后得到新点横坐标,把每个点纵坐标分别乘以x,y,1得到新点纵坐标。所以反过来把[(x,0),(0,y),( x0 , y0 )]分别除以x,y,1即可得到变换矩阵为:[(1,0),(0,1),( x0 , y0 )],在CSS3中表示为(1,0,0,1, x0 , y0 )。
通过观察发现坐标轴上的点之间距离相等,所以可以用(1,0),(0,1)代表x,y轴,这样这两个点加上原点变化后的坐标即为需要的矩阵。这样原始矩阵即为(1,0,0,1,0,0)。

2、 缩放
x、y轴分别缩放 tx ty 倍后,(1,0)的新坐标为( tx ,0),(0,1)的新坐标为(0, ty ),原点不变,所以变换矩阵为( tx ,0,0, ty ,0,0)。

3、转动
转动即把x、y轴同时转一个角度,顺时针角度为正,假设角度为θ,通过数学三角函数可以很容易求得转动后的坐标:(1,0) (cos⁡θ,sin⁡θ ),(0,1) (-sin⁡θ,cos⁡θ ),所以变换矩阵为(cos⁡θ,sin⁡θ,-sin⁡θ,cos⁡θ,0,0)

4、拉伸
拉伸分为x轴向拉伸和y轴向拉伸,设拉伸角分别为 θx θy 。如图:
这里写图片描述
则:(1,0) (1,tan θy ),(0,1) (tan⁡ θx ,1),
所以变换矩阵为(1,tan⁡ θy ,tan θx ,1,0,0),所以发现x轴反向拉伸角度为正。

5、其它变换
(1)有了上述理解后其它变换就容易了,比如把一张图片左右颠倒:
这里写图片描述
只要把x轴点取反即可,(1,0) (-1,0)
所以变换矩阵为(-1,0,0,1,0,0)。

如果想把图片沿着y=kx的直线翻转,设(1,0)的对称点坐标( x1 , y1 ),由数学知识可以得到方程组 y1x11 = 1k y12 =k x1+12 可得到 x1 = 1k21+k2 y1 = 2k1+k2
设(0,1)的对称点坐标为( x2 , y2 ),可得到方程组 y21x2 =- 1k y2+12 =k x22 可得到
x2 = 2k1+k2 y2 = k211+k2 ,所以变换矩阵为 (1k21+k2,2k1+k2,2k1+k2,k211+k2,0,0)
取k=2,图片变换为:
这里写图片描述

(2)不仅可以以(1,0),(0,1)作为基点,可以取任意点作为基点,只要除以相应的倍数就可以得到变换矩阵的值,如把图片作如下转换
这里写图片描述
只要知道图片两个对角点坐标分别除以图片宽度、高度的一半即可得到变换矩阵。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值