在介紹矩陣變換transform()前,我們來說一說什麼是變換矩陣。
以上是Canvas中transform()方法所對應的變換矩陣。而此方法正是傳入圖中所示的六個參數,具體為context.transform(a,b,c,d,e,f)。
各參數意義對應如下表:
参数 | 意义 |
---|---|
a | 水平缩放(1) |
b | 水平倾斜(0) |
c | 垂直倾斜(0) |
d | 垂直缩放(1) |
e | 水平位移(0) |
f | 垂直位移(0) |
當我們把對應的0或1代入進矩陣,可以發現這是一個單位矩陣(水平和垂直縮放預設值是1,代表縮放1倍,即不縮放)。此方法使用新的變化矩陣與目前變換矩陣進行乘法運算,然後得到各種變化的效果。
這裡簡單說一下,當我們想對一個圖形進行變換的時候,只要對變換矩陣對應的參數進行操作,操作之後,對圖形的各個定點的座標分別乘以這個矩陣,就能得到新的定點的座標。
transform()方法
而Canvas繪圖中,就給咱們提供了一個方法來改變這個變換矩陣,那就是transform()。
預設座標係是以畫布最左上角為座標原點(0,0)。越往右X軸數值越大,越往下Y軸的數值越大。在預設座標系中,每一個點的座標都是直接對應到一個CSS像素。畫布上一些特定的操作和屬性的設定都使用預設座標系。然而除了預設座標系之外,每個畫布還有一個還有一個“當前變換距陣”,作為圖形狀態的一部分。此矩陣定義了畫布的目前座標系。當指定了一個點的座標後,畫布的大部分操作都會將該點對應到目前的座標系中,而不是預設的座標系。目前變換矩陣是用來指定的座標轉換成為預設座標系中的等價座標。座標的變換也影響了文字和線段的繪製。
呼叫translate()方法只是簡單地將座標原點進行上、下、左、右移動。
rotate()方法會將座標軸依照指定角度進行順時針旋轉。
scale()方法實現對x軸或由y軸上的距離進行延長和縮短。傳遞負值會實現
scale以座標原點做參照點將座標軸進行翻轉。就好像鏡子裡的鏡像。
translate用來將座標原點移動到畫布最左下角,然後scale方法用於實現將y軸進行翻轉,這樣的就變成了越往上y軸越大。
從數學角度來理解座標系變換:
translate、rotate和scale方法想像成對座標軸的變換,就很容易理解了。從代數角度很容易理解座標變換,就是把變換想像成一個變換後座標系中的點(x,y),到原來的座標系統變成了(x`,y`)。
呼叫 c.translate(dx,dy)。的方法等效如下表達式
x` = x dx; //新系統中的x軸的0,在原系統中就是dx
y` = y dy;
c.scale(sx,sy);
x` = sx*x;
y` = sy*y;
c.rotate()
x` =x*cos(a)-y*sin(a);
y` = y*cos(a) x*sin(a) ;
建議使用transform()的時候,可以在以下幾個情況下使用:
1.使用context.transform (1,0,0,1,dx,dy)代替context.translate(dx,dy)
2.使用context.transform(sx,0,0,sy,0 ,0)代替context.scale(sx, sy)
3.使用context.transform(0,b,c,0,0,0)來實現傾斜效果(最實用)。
不用再使用它去實現旋轉了,另外也沒有也不用全記這些結論,直接記下abcdef六個參數的意義,效果是一樣的。
下面我們來看一個程式碼,熟悉一下:
- nbsp;html>
- "zh">
- "UTF-8">
-
矩阵变换 - body { background: url("./images/bg3.jpg") repeat; }
- #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }
-
"canvas-warp">
- 你的浏览器居然不支持Canvas?!赶快换一个吧!!
- window.onload = 函數(){
- var canvas = document.getElementById(" canvas.width = 800;
- canvas.height = 600;
- var context = canvas.getContext("2d" context.fillStyle =
- "#FFF"; context.fillRect(0,0,800,600);
- context.fillStyle =
- "黃"; context.tripStyle =
- "#00AAAA"; context.lineWidth = 5;
- context.save();
- //平移至(300,200) context.transform(1,0,0,1,300,200);
- //水平放大2倍,且垂直方向放大1.5倍 context.transform(2,0,0,1.5,0,0);
- //水平方向向右方向寬度為10%的距離,且垂直方向上高度10%的距離 context.transform(1,-0.1,0.1,1,0,0);
- context.fillRect(0,0,200,200);
- context.行程規劃(0,0,200,200);
- context.restore();
- };
- 腳本>
transform()方法的行為相對於由rotate()、scale()、translate()或transform()完成的其他變換。將繪圖設定為原來的一倍,則transform()方法將繪圖放大一倍,那麼我們的繪圖最終將放大四倍。
但是setTransform()不會相對於其他transform來發生行為。
這裡我們透過一個例子來說明:
JavaScript 程式碼
- nbsp;html>
- "zh">
- "UTF-8">
-
矩阵变换 - body { background: url("./images/bg3.jpg") repeat; }
- #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }
-
"canvas-warp">
- 你的浏览器居然不支持Canvas?!赶快换一个吧!!
- window.onload = 函數(){
- var canvas = document.getElementById(" canvas.width = 800;
- canvas.height = 600;
- var context = canvas.getContext("2d" context.fillStyle =
- "#FFF"; context.fillRect(0,0,800,600);
- context.fillStyle=
- "黃"; context.fillRect(200,100,250,100)
- context.setTransform(1,0.5,-0.5,1,30,10);
- context.fillStyle=
- "紅色"; context.fillRect(200,100,250,100);
- context.setTransform(1,0.5,-0.5,1,30,10);
- context.fillStyle=
- "藍色"; context.fillRect(200,100,250,100);
- };
- 腳本>
解釋一下交換過程:每當我們呼叫setTransform()時,它都會重置之前的一個變換矩陣然後建立新的矩陣,因此下面下面的例子中,不會顯示紅色圖形,因為是藍色圖形。

html5的div元素默认一行不可以放两个。div是一个块级元素,一个元素会独占一行,两个div默认无法在同一行显示;但可以通过给div元素添加“display:inline;”样式,将其转为行内元素,就可以实现多个div在同一行显示了。

html5中列表和表格的区别:1、表格主要是用于显示数据的,而列表主要是用于给数据进行布局;2、表格是使用table标签配合tr、td、th等标签进行定义的,列表是利用li标签配合ol、ul等标签进行定义的。

固定方法:1、使用header标签定义文档头部内容,并添加“position:fixed;top:0;”样式让其固定不动;2、使用footer标签定义尾部内容,并添加“position: fixed;bottom: 0;”样式让其固定不动。

html5中不支持的标签有:1、acronym,用于定义首字母缩写,可用abbr替代;2、basefont,可利用css样式替代;3、applet,可用object替代;4、dir,定义目录列表,可用ul替代;5、big,定义大号文本等等。

HTML5中画布标签是“<canvas>”。canvas标签用于图形的绘制,它只是一个矩形的图形容器,绘制图形必须通过脚本(通常是JavaScript)来完成;开发者可利用多种js方法来在canvas中绘制路径、盒、圆、字符以及添加图像等。

html5废弃了dir列表标签。dir标签被用来定义目录列表,一般和li标签配合使用,在dir标签对中通过li标签来设置列表项,语法“<dir><li>列表项值</li>...</dir>”。HTML5已经不支持dir,可使用ul标签取代。

3种取消方法:1、给td元素添加“border:none”无边框样式即可,语法“td{border:none}”。2、给td元素添加“border:0”样式,语法“td{border:0;}”,将td边框的宽度设置为0即可。3、给td元素添加“border:transparent”样式,语法“td{border:transparent;}”,将td边框的颜色设置为透明即可。

因为html5不基于SGML(标准通用置标语言),不需要对DTD进行引用,但是需要doctype来规范浏览器的行为,也即按照正常的方式来运行,因此html5只需要写doctype即可。“!DOCTYPE”是一种标准通用标记语言的文档类型声明,用于告诉浏览器编写页面所用的标记的版本。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),