溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

GDI+、HTML5、cairo等繪圖庫(kù)中matrix理解的

發(fā)布時(shí)間:2020-06-23 18:13:34 來(lái)源:網(wǎng)絡(luò) 閱讀:1223 作者:yt19850701 欄目:移動(dòng)開發(fā)

    GDI+、HTML5、cairo都是二維繪圖庫(kù),他們的api都提供縮放、旋轉(zhuǎn)、平移等矩陣變換操作,還可以修改matrix,指定變換矩陣。但是,當(dāng)做一個(gè)繪圖引擎底層使用這些繪圖庫(kù)時(shí),就發(fā)現(xiàn)他們的概念不明確,網(wǎng)上資料、包括很多書,都講得是一些似是而非的概念,經(jīng)過(guò)總結(jié),得出我自己的正確版本,如下所述:

    首先,坐標(biāo)系的概念。GDI+中以winform程序?yàn)闇?zhǔn)描述如下,有3個(gè)坐標(biāo)系:世界坐標(biāo)系、頁(yè)面坐標(biāo)系、設(shè)備坐標(biāo)系(參見GDI+ SDK官方手冊(cè))。HTML5和cairo中,分為世界坐標(biāo)系和用戶坐標(biāo)系。

    其次,變換的概念。變換,是指對(duì)坐標(biāo)系中的圖形進(jìn)行變換,通過(guò)將圖形的每個(gè)點(diǎn)坐標(biāo)乘以變換矩陣來(lái)實(shí)現(xiàn)。

    第三,變換的過(guò)程。這塊是重點(diǎn),GDI+與HTML5和cairo不同。GDI+同時(shí)支持變換坐標(biāo)系和變換物體。HTML5和cairo僅支持變換坐標(biāo)系。

    變換坐標(biāo)系,就是在當(dāng)前坐標(biāo)系中,進(jìn)行縮放、旋轉(zhuǎn)、平移或直接乘變換矩陣等操作,得到新坐標(biāo)系,之后,在新的坐標(biāo)系中又可以進(jìn)行變換,如此循環(huán)往復(fù)。最后用戶調(diào)用api進(jìn)行繪圖時(shí)傳入的坐標(biāo)是最新的坐標(biāo)系中的坐標(biāo),這樣,就可以保持坐標(biāo)不變,僅通過(guò)變換坐標(biāo)系實(shí)現(xiàn)繪制。

    變換物體,就是僅存在一個(gè)坐標(biāo)系,即世界坐標(biāo)系,物體的坐標(biāo)就是在世界坐標(biāo)系中的坐標(biāo),變換物體即物體的坐標(biāo)乘變換矩陣,得到世界坐標(biāo)系中的新坐標(biāo)。

    GDI+對(duì)變換坐標(biāo)系和變換物體的支持:

    各API中加參數(shù)MatrixOrder.Prepend即表示在當(dāng)前變換矩陣前插入矩陣(左乘),對(duì)應(yīng)變換坐標(biāo)系,加參數(shù)MatrixOrder.Append即表示在當(dāng)前變換矩陣后插入矩陣(右乘),對(duì)應(yīng)變換物體。GDI+中坐標(biāo)以行向量表示,坐標(biāo)變換形如:

           |m11, m12, 0|

|x,y,1|  |m21, m22, 0| = |x', y', 1|,

           |m31, m32, 1|

用P表示點(diǎn),M表示變換矩陣則有

P M1 M2 ... Mn = P',

其表示變換物體,即在世界坐標(biāo)系中,對(duì)物體進(jìn)行若干次變換,得到新的物體坐標(biāo)。

當(dāng)變換坐標(biāo)系時(shí),

用Q表示坐標(biāo),N表示變換矩陣擇優(yōu)

Q Nn Nn-1 ... N1 = Q',

其表示從最新的坐標(biāo)系中坐標(biāo)Q倒推出世界坐標(biāo)系中的坐標(biāo)Q'的過(guò)程。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI