`
webcode
  • 浏览: 5942041 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

什么是变形矩阵?

 
阅读更多

译序:在前面学习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也表示当前用户编辑坐标到实际视图坐标的映射:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics