最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)論 (共 條)

使用qq登录你需要登录后才可以评论。
湘潭市| 重庆市| 衡阳市| 准格尔旗| 郸城县| 介休市| 秦安县| 新兴县| 类乌齐县| 霸州市| 马边| 松滋市| 邻水| 逊克县| 溆浦县| 桃江县| 称多县| 柳林县| 姜堰市| 宁武县| 兰溪市| 天长市| 屯昌县| 九龙城区| 丹阳市| 兰西县| 东光县| 舒兰市| 长子县| 忻城县| 高碑店市| 彰化县| 乌拉特后旗| 乐亭县| 金坛市| 普安县| 萝北县| 鹤岗市| 都安| 湘乡市| 仙游县|