Html5 Canvas transform就是矩陣變換,一種座標的變形。javascript
座標變形的三種方式,平移translate, 縮放scale以及旋轉rotate均可以經過transform作到。html
transform(m11, m12, m21, m22, dx, dy):這個方法必須將當前的變形矩陣乘上下面的矩陣:java
m11canvas |
m21this |
dxspa |
m12code |
m22orm |
dyhtm |
0blog |
0 |
1 |
也就是說假設 變化前A(x,y)獲得 變換後B(x’,y’)能夠經過乘以上述矩陣便可獲得:
好比說:縮放scale
x」=x*a; //x放大a倍
y」=y*b; //y放大b倍
只需transform(a, 0, 0, b, 0, 0);
A(x,y)經過transform就獲得了放大後的B(x’,y’);與方法context.scale(a,b)同效;
好比 旋轉rotate
假設將(x,y)繞原點逆時針旋轉θ獲得(x」,y」),則:
x’=x*cosθ-y*sinθ
y’=x*sinθ y*cosθ
只需transform(Math.cos(θ*Math.PI/180),Math.sin(θ*Math.PI/180),-Math.sin(θ*Math.PI/180),Math.cos(θ*Math.PI/180),0,0)
A(x,y)經過transform就獲得了旋轉後的B(x’,y’);與方法context.rotate(θ)同效;
就是說只要知道變化前和變換後的座標轉化公式,就能經過與矩陣相乘的方法獲得;
setTransform這個方法重置當前的變形矩陣爲單位矩陣,而後以相同的參數調用 transform 方法。就是消除前面transform行爲對此次行爲的影響;
提供一個代碼能夠本身研究一下
<!DOCTYPE HTML> <html> <head> <script type=」text/javascript」> function drawShape(){ // get the canvas element using the DOM var canvas = document.getElementById(「mycanvas」); // Make sure we don」t execute when canvas isn」t supported if (canvas.getContext){ // use getContext to use the canvas for australian casinos online drawing var ctx = canvas.getContext(「2d」); var sin = Math.sin(Math.PI/6); var cos = Math.cos(Math.PI/6); ctx.translate(200, 200); var c = 0; for (var ratedbet.co.uk i=0; i <= 12; i ) { c = Math.floor(255 / 12 * i); ctx.fillStyle = 「rgb(」 c 「,」 c 「,」 c 「)」; ctx.fillRect(0, 0, 100, 100); ctx.transform(cos, sin, -sin, cos, 0,0); } ctx.setTransform(-1, 0, 0, 1, 200, 200); ctx.fillStyle = 「rgba(100, 100, 255, 0.5)」; ctx.fillRect(50, 50, 100, 100); }else { alert(「You need Safari or Firefox 1.5 to see this demo.」); } } </script> </head> <body onload=」drawShape();」> <canvas id=」mycanvas」 width=」400″ height=」400″></canvas> </body> </html>