利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換.doc

利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換.doc

ID:58619322

大小:76.00 KB

頁(yè)數(shù):9頁(yè)

時(shí)間:2020-10-17

利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換.doc_第1頁(yè)
利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換.doc_第2頁(yè)
利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換.doc_第3頁(yè)
利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換.doc_第4頁(yè)
利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換.doc_第5頁(yè)
資源描述:

《利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、利用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換之前做拓?fù)鋱D,本來(lái)打算整一套坐標(biāo)系統(tǒng)在里面的,后來(lái)因?yàn)闀r(shí)間原因暫時(shí)用了最原始的方法實(shí)現(xiàn)?,F(xiàn)在稍稍得閑,重新開始思考這個(gè)問(wèn)題。不過(guò)在搜索的時(shí)候,意外發(fā)現(xiàn).NetFramework類庫(kù)中自帶的有實(shí)現(xiàn)坐標(biāo)系轉(zhuǎn)換功能的類。Reflector了一把,發(fā)現(xiàn)代碼看不懂了——都是利用矩陣操作的。矩陣這玩意兒,幾年沒(méi)用早忘完了。于是認(rèn)真學(xué)習(xí)了一把,順便把如何用矩陣進(jìn)行坐標(biāo)轉(zhuǎn)換的過(guò)程記錄和注解一下。文中部分內(nèi)容摘取自MSDN,搜索“變換的矩陣表示形式”即可找到。首先review一下矩陣的基礎(chǔ)知識(shí):m×n矩陣是排列

2、在m行和n列中的一系列數(shù)。下圖顯示幾個(gè)矩陣。?可以通過(guò)將單個(gè)元素相加來(lái)加合兩個(gè)尺寸相同的矩陣。下圖顯示了兩個(gè)矩陣相加的示例。?m×n矩陣可與一個(gè)n×p矩陣相乘,結(jié)果為一個(gè)m×p矩陣。第一個(gè)矩陣的列數(shù)必須與第二個(gè)矩陣的行數(shù)相同。例如,一個(gè)4×2矩陣與一個(gè)2×3矩陣相乘,產(chǎn)生一個(gè)4×3矩陣。矩陣的行列的平面點(diǎn)可視為矢量。例如,(2,5)是具有兩個(gè)組件的矢量,(3,7,1)是具有三個(gè)組件的矢量。兩個(gè)矢量的點(diǎn)積定義如下:(a,b)?(c,d)=ac+bd(a,b,c)?(d,e,f)=ad+be+cf例如,(2,3)和(

3、5,4)的點(diǎn)積是(2)(5)+(3)(4)=22。(2,5,1)和(4,3,1)的點(diǎn)積是(2)(4)+(5)(3)+(1)(1)=24。請(qǐng)注意,兩個(gè)矢量的點(diǎn)積是數(shù)字,而不是另一個(gè)矢量。另外請(qǐng)注意,只有當(dāng)兩個(gè)矢量的組件數(shù)相同時(shí),才能計(jì)算點(diǎn)積。將A(i,j)作為矩陣A中第i行、第j列的項(xiàng)。例如,A(3,2)是矩陣A中第3行、第2列的項(xiàng)。假定A、B和C是矩陣,且AB=C,則C的項(xiàng)計(jì)算如下:C(i,j)=(A的第i行)?(B的第j列)下圖顯示了矩陣相乘的幾個(gè)示例。以第二個(gè)等式為例,假設(shè)等式兩邊的矩陣分別是a、b、c,1*

4、3的矩陣和3*2的矩陣相乘,得到的結(jié)果為1*2的矩陣。其中c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0],c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]。矩陣的加法、乘法,可以用來(lái)做坐標(biāo)轉(zhuǎn)換。我們通常使用3*3(如果不需要旋轉(zhuǎn),則2*2的矩陣即可)的矩陣來(lái)做平面上的各種坐標(biāo)轉(zhuǎn)換,包括x/y軸的平移、旋轉(zhuǎn)?,F(xiàn)在來(lái)看一個(gè)簡(jiǎn)單的坐標(biāo)系轉(zhuǎn)換的例子:假設(shè)我們的客戶區(qū)分辨率是100*100,要在客戶

5、區(qū)中心點(diǎn)畫一個(gè)點(diǎn),這個(gè)點(diǎn)的坐標(biāo)是(x,y)?,F(xiàn)在如果我們調(diào)整了客戶區(qū)分辨率為400*300,此時(shí)如果還需要保持這個(gè)點(diǎn)的相對(duì)位置不變,計(jì)算他的坐標(biāo)應(yīng)該是(x*400/100,y*300/100)。這個(gè)計(jì)算過(guò)程很簡(jiǎn)單,那么用矩陣操作應(yīng)該如何來(lái)實(shí)現(xiàn)呢?我們將這個(gè)點(diǎn)視為一個(gè)1*2的矩陣,將其乘以一個(gè)2*2的矩陣,得出的仍然是一個(gè)1*2的矩陣,就是新的坐標(biāo)了。由于屏幕分辨率在x、y軸分別擴(kuò)大為原來(lái)的4倍和3倍,那么我們只要將點(diǎn)的x、y軸坐標(biāo)都擴(kuò)大到原來(lái)的4、3倍即可。公式如下:?等式左邊的第二個(gè)矩陣,就是用來(lái)實(shí)現(xiàn)坐標(biāo)轉(zhuǎn)換的

6、矩陣。其中b[0][0]就是x軸的擴(kuò)大倍數(shù),b[1][1]就是在y軸上的擴(kuò)大倍數(shù)。這里面b[0][1]和b[1][0]永遠(yuǎn)是0。坐標(biāo)系的這種轉(zhuǎn)換,叫做線性變換。OK??赐赀@個(gè)例子,是不是覺(jué)得用矩陣比直接計(jì)算還麻煩?嗯,對(duì)于這種簡(jiǎn)單的情況是這樣的。不過(guò)別急,繼續(xù)看坐標(biāo)系旋轉(zhuǎn)的情況,如果現(xiàn)在要求這個(gè)客戶區(qū)逆時(shí)針旋轉(zhuǎn)30度,要保持這個(gè)點(diǎn)的相對(duì)位置不變,他的新坐標(biāo)應(yīng)該是多少呢?普通的計(jì)算的公式就不陳述了,這就是個(gè)初中幾何題目。我們直接來(lái)看怎樣通過(guò)矩陣操作實(shí)現(xiàn)。首先看公式:在二維空間中,旋轉(zhuǎn)可以用一個(gè)單一的角θ定義。作為約

7、定,正角表示逆時(shí)針旋轉(zhuǎn)。關(guān)于原點(diǎn)逆時(shí)針旋轉(zhuǎn)θ的矩陣是:?也就是說(shuō),逆時(shí)針旋轉(zhuǎn)30度的新坐標(biāo)就是:當(dāng)然,除此之外,坐標(biāo)系還有平移,但是這個(gè)就簡(jiǎn)單了,只是一個(gè)簡(jiǎn)單的矩陣加法。比如(x,y)向右平移一個(gè)單位,用矩陣就是[x,y]+[1,0]就是是(x+1,y)。下圖顯示了應(yīng)用于點(diǎn)(2,1)的幾個(gè)變換:?前圖中顯示的所有變換都是線性變換。某些其他變換(如平移)不是線性的,不能表示為與2×2矩陣相乘的形式。假定您要從點(diǎn)(2,1)開始,將其旋轉(zhuǎn)90度,在x方向?qū)⑵淦揭?個(gè)單位,在y方向?qū)⑵淦揭?個(gè)單位。可通過(guò)先使用矩陣乘法再

8、使用矩陣加法來(lái)完成此操作。后面跟一平移(與1×2矩陣相加)的線性變換(與2×2矩陣相乘)稱為仿射變換,如上圖所示。放射變換(先乘后加)可以通過(guò)乘以一個(gè)3*3的矩陣來(lái)實(shí)現(xiàn),若要使其起作用,平面上的點(diǎn)必須存儲(chǔ)于具有虛擬第三坐標(biāo)的1×3矩陣中。通常的方法是使所有的第三坐標(biāo)等于1。例如,矩陣[211]代表點(diǎn)(2,1)。下圖演示了表示為與單個(gè)3×3矩陣相乘的仿射變換(旋轉(zhuǎn)90度;在

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。