国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

canvas矩陣變換原理

2023-04-30 14:32 作者:李偉_Li慢慢  | 我要投稿

課堂目標(biāo)

  • 理解矩陣變換的概念

  • 可以用不同的變換方式變換物體

知識(shí)點(diǎn)

  • ctx.translate()

  • ctx.scale()

  • ctx.rotate()

  • ctx.transform()

  • 矩陣乘法

1-用canvas做個(gè)試驗(yàn)

先畫這個(gè)矩形熱熱身。

效果如下:

這個(gè)矩形在瀏覽器的左上角。

我們把它往右下方移動(dòng)一下,方便觀察。

效果如下:

有點(diǎn)呆板,讓它旋轉(zhuǎn)30°

效果如下:

我再在其本地坐標(biāo)系的y軸上再做一個(gè)縮放:

效果如下:

這些看起來(lái)都沒(méi)啥,很簡(jiǎn)單。

接下來(lái),我們說(shuō)重點(diǎn)。

我把rotate和scale的順序顛倒,再畫一個(gè)藍(lán)色的矩形。

效果如下:

我剛才沒(méi)有畫出藍(lán)色的矩形,而是畫出了一個(gè)藍(lán)色的平行四邊形。

這是為什么呢?

這就是我們本章要討論的話題了。



2-矩陣乘法

canvas里每一次translate(),rotate()或scale() ,都是獨(dú)立的矩陣變換,當(dāng)連續(xù)執(zhí)行這些方法時(shí),就可以視之為矩陣的相乘。

因?yàn)榫仃嚨某朔ú环铣朔ǖ慕粨Q律,所以當(dāng)縮放矩陣非等比縮放的時(shí)候,(旋轉(zhuǎn)矩陣 * 縮放矩陣)不等于(縮放矩陣 * 旋轉(zhuǎn)矩陣)。

我們用矩陣寫一下這個(gè)邏輯。

旋轉(zhuǎn)矩陣

設(shè):

旋轉(zhuǎn)矩陣為mr

旋轉(zhuǎn)角度為30°

s=sin30°

c=cos30°

則:

mr=[?

????c,-s,0,?

????s, c,0,?

????0, 0,1,?

]


縮放矩陣

設(shè):

縮放矩陣為ms

x,y方向的縮放量為(1,2)

則:

ms=[?

????1,0,0,?

????0,2,0,?

????0,0,1,?

]


旋轉(zhuǎn)矩陣*縮放矩陣

將mr的第n行點(diǎn)積ms的第n列。

mr*ms= [?

????(c,-s,0)·(1,0,0),(c,-s,0)·(0,2,0),(c,-s,0)·(0,0,1),?

????(s, c,0)·(1,0,0),(s, c,0)·(0,2,0),(s, c,0)·(0,0,1),?

????(0, 0,1)·(1,0,0),(0, 0,1)·(0,2,0),(0, 0,1)·(0,0,1),?

]=?[?

????c,-2*s,0,?

????s,2*c, 0,?

????0,0, ?1,?

]

縮放矩陣*旋轉(zhuǎn)矩陣

ms*mr=[?

????c, ?-s, ?0,?

????2*s, 2*c, 0,?

????0, ?0, ? 1,?

]

對(duì)比一下兩個(gè)矩陣相乘的結(jié)果,會(huì)發(fā)現(xiàn)他們是不一樣的。

對(duì)于這兩個(gè)結(jié)果,我們可以畫一下看看。



3-矩陣?yán)L圖

我們先看一下旋轉(zhuǎn)矩陣*縮放矩陣的效果。

1.計(jì)算一個(gè)30°的正弦值和余弦值。

2.按照之前旋轉(zhuǎn)矩陣*縮放矩陣的結(jié)果聲明一個(gè)矩陣。

3.使用上面的矩陣?yán)L制一個(gè)綠色的矩形。

效果如下:

transform()是canvas內(nèi)置的相對(duì)矩陣變換方法,其參數(shù)與行主序三階矩陣的對(duì)應(yīng)關(guān)系是[0,3,1,4,2,5],與列主序三階矩陣的對(duì)應(yīng)關(guān)系是[0,1,3,4,6,7]。

此時(shí)的transform()方法就相當(dāng)于畫矩形1時(shí)的:

接下來(lái)我們可以用同樣原理測(cè)試一下縮放矩陣*旋轉(zhuǎn)矩陣的效果。

效果如下:

此時(shí)的transform()方法就相當(dāng)于畫矩形2時(shí)的:



總結(jié)

我們這節(jié)課主要說(shuō)了canvas內(nèi)置的矩陣變換方法,以及其矩陣變換的實(shí)現(xiàn)原理。

基于這個(gè)原理我們可以去架構(gòu)二維圖形的模型矩陣、相機(jī)的視圖投影矩陣、裁剪矩陣等多種矩陣,從而實(shí)現(xiàn)對(duì)圖形和視圖的靈活變換。

我最近就開發(fā)了一個(gè)canvas 矩陣變換相關(guān)的進(jìn)階課程,大家若感興趣,可點(diǎn)擊此鏈接:https://duz.xet.tech/s/Ky1eF



canvas矩陣變換原理的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
额济纳旗| 库尔勒市| 佳木斯市| 丰宁| 界首市| 五家渠市| 孟津县| 弥勒县| 个旧市| 乐亭县| 微山县| 璧山县| 于田县| 巴里| 乌什县| 虹口区| 广东省| 江油市| 察雅县| 洛川县| 镇原县| 哈密市| 武邑县| 盘锦市| 建德市| 汾阳市| 固阳县| 尚义县| 泊头市| 页游| 吉木乃县| 图木舒克市| 凤山市| 陇南市| 巫山县| 依安县| 琼中| 隆昌县| 洪泽县| 沙河市| 宁陕县|