什么是变形矩阵?

译序:在前面学习HTML5 Canvas和CSS3动画的时候,我都刻意避开了变形矩阵,原因在于不太理解该矩阵的具体含义。后来搜索了相关的介绍,找到了一篇W3C的文档,节选翻译如下。变形其实也是挺简单的。


原文地址:http://www.w3.org/TR/SVG/coords.html#TransformMatrixDefined

 

在数学中,所有的变形都能用3X3的变形矩阵来表示,形式如下:


在上述的3X3矩阵中只用到了6个值,因而变形矩阵也可以表示为如下的向量形式:

[a b c d e f]

变形的数学实质实际上是将坐标和长度从新的坐标系统中(newCoordSys)映射到旧的坐标系统(prevCoordSys)中,如下所示:


简单的变形可以用变形矩阵形式表示,如下所示:

  • 位移translate)等价于矩阵 或者向量 [1 0 0 1 tx ty],其中tx和ty分别表示在坐标系中x和y坐标位移的距离。
  • 缩放scale)等价于矩阵 或者向量 [sx 0 0 sy 0 0]。新坐标系中的x、y坐标值分别是旧坐标系中的x、y值的sx倍和sy倍。
  • 围绕挂点(origin)的旋转rotate)等价于矩阵或者向量 [cos(a) sin(a) -sin(a) cos(a) 0 0],其效果是按角度a旋转坐标轴。
  • 沿x方向的倾斜变形(skewX)等价于矩阵或者向量 [1 0 tan(a) 1 0 0],其效果是按角度a倾斜x坐标。
  • 沿y方向的倾斜变形(skewY)等价于矩阵或者向量 [1 tan(a) 0 1 0 0],其效果是按角度a倾斜y坐标。

变形可以进行任意层次的嵌套。嵌套变形的效果就是将变形矩阵按变形的先后顺序连乘(串联)在一起:


对于每个给定的元素,定义在它和它的所有依赖它来建立视图的祖先元素(通常是给定元素最直接的SVG祖先)之上的变形矩阵的累乘叫做当前变形矩阵(CTM)。因此CTM也表示当前用户编辑坐标到实际视图坐标的映射:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值