css3 matrix 2D矩陣和canvas transform 2D矩陣


一看到“2D矩陣”這個高大上的名詞,有的同學可能會有種畏懼感,“矩陣”,看起來好高深的樣子,我還是看點簡單的吧。其實本文就很簡單,你只需要有一點點css3 transform的基礎就好。

沒有前戲,直奔主題

2D矩陣指的是元素在2D平面內發生諸如縮放、平移、旋轉、拉伸四種變化,在css3中對應4個方法分別是scale()、translate()、rotate()和skew(),可以說這4個方法是css3矩陣matrix的快捷方式,因為這4個方法本質都是由matrix實現的。類似地,在canvas中,與前3種變化對應的3個方法分別是scale()、translate()、rotate(),canvas對象沒有skew()方法。css3中的矩陣和canvas矩陣原理是相通的,所以這里只說css3的矩陣matrix,兩者有一些區別,后面會說。

matrix方法有六個參數matrix(a, b, c, d, x, y),六個參數默認值是matrix(1, 0, 0, 1, 0, 0),這六個參數分別控制不同的變換

a 水平縮放

b 水平拉伸

c 垂直拉伸

d 垂直縮放

x 水平位移

y 垂直位移

可以運行下面的demo,改動對應的參數查看效果


如果把以上css3的4個方法還原成矩陣的寫法,它們是這樣的:

  • 縮放:scale(sx, sy) 等同於 matrix(sx, 0, 0, sy, 0, 0);
  • 平移:translate(tx, ty) 等同於 matrix(1, 0, 0, 1, tx, ty);
  • 旋轉:rotate(deg) 等同於 matrix(cos(deg), sin(deg), -sin(deg), cos(deg), 0, 0);
  • 拉伸:skew(degx, degy) 等同於 matrix(1, tan(degy), tan(degx), 1, 0, 0);

一目了然,matrix原始寫法看起來更復雜一些,大家一般使用左邊的快捷方式就好了。

計算變換后的transform-origin

其實矩陣基本上就上面這些內容,網上大部分介紹矩陣的教程一般都會搬出下面這張圖來嚇唬人

圖1:

a c e分別和x y 1相乘並相加得出結果x' = ax + cy + e;

b d f分別和x y 1相乘並相加得出結果y' = bx + dy + f;

其中的x y是元素變換之前的中心點,即transform-origin的值,x' y'是元素變換之后的transform-origin值。

假設一個元素的中心點為100,100,將該元素向右平移200px,向下平移100px后,中心點坐標為:

x' =  ax + cy + e = 1*100 + 0*100 + 200 = 300

y' = 0*100 + 1*100 + 100 = 200

平移后的中心點坐標為300,200

圖2:

圖1的作用僅僅是告訴我們如何計算元素變換后的中心點,沒什么特別的。 

css3 matrix和canvas transform的區別

 大家都知道css3 transform-origin默認是元素的中點,css3旋轉就是繞着這個點轉動,而canvas的transform的rotate方法是默認繞着canvas的原點(即左上角)旋轉。


OK,以上就是2D矩陣的全部內容,對文中的公式建議自己做個demo測試一下以加深印象,否則看完一會准會忘記。

水平有限,有疏漏之處歡迎交流。

by:王美建 from http://www.cnblogs.com/wangmeijian/p/4713722.html轉載注明出處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM