資源描述:
《基于仿射變換的三維到二維轉換算法》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、第11卷第27期2011年9月科學技術與工程Vol.11No.27Sep.20111671—1815(2011)27-6743-04ScienceTechnologyandEngineering2011Sci.Tech.Engrg.基于仿射變換的三維到二維轉換算法劉婧(渭南師范學院,渭南714000)摘要根據(jù)二維仿射變換公式推導了三維仿射變換公式,給出了三維坐標系中的仿射矩陣表示公式。同時提出了一種簡單的三維到二維的坐標轉換公式,并且使用基于C++的QT類庫對這種算法進行了實現(xiàn)。這種算法可以應用于一些使用二維模擬三維的圖形處理軟件中
2、,比如flash中的三維變換模擬和GUI編程中的三維圖形變換等情況下。關鍵詞仿射變換三維C++QT中圖法分類號TP391.75;文獻標志碼A進行一些三維圖形處理要用到三維圖形的旋何知識很容易推出x'=xcosθ-ysinθ,y'=xsinθ+轉、平移、拉伸等變換。同時計算機屏幕又是一個ycosθ。用矩陣表示為(1)式。二維的平面,如何簡單地將三維圖形表示在二維平x'cosθ-sinθx()(1)面上。一般的教材和網絡上二維仿射變換公式和y'=(sinθcosθ)()y案例較多,但很少有三維仿射變換的推導和實1.1.2縮放[1]例。于是
3、本文根據(jù)二維仿射變換推導了三維仿縮放公式為x'=sxx與y'=syy,sx和sy為x坐射變換矩陣的表示。并借助三維圖形在平面上的標和y坐標的縮放因子。其中用矩陣表示為式斜二側畫法對三維坐標進行了降維處理。使得三(2)。維圖形變換和平面表示一并得到了解決。x'sx0x()(2)y'=(0s)()yy1坐標變換和仿射變換1.2仿射變換前面研究了二維坐標的旋轉和縮放。其他二在線性代數(shù)中,線性變換能夠用矩陣表示。如維坐標變換,例如切變、反射、投影等都可以用類似果T是一個把Rn映射到Rm的線性變換,且x珒是一的方法表示??梢姵R姷亩S圖形變換最
4、終都可個具有n個元素的列向量,那么我們把m×n的矩[4]用一個2×2的矩陣加以表示。陣A,稱為T的變換矩陣,其表示形式為:T(x珒)=Ax珒。前面研究的所有變換都是線性變換。某些其仿射變換是線性變換的一種,經常應用于計算機圖他變換(如平移)不是線性的,不能表示為與2×2[2]形學中。矩陣相乘的形式。假定要從點(2,1)開始,將其1.1仿射變換在二維圖形中的應用旋轉90度,在x方向將其平移3個單位,在y方向1.1.1旋轉將其平移4個單位??赏ㄟ^先使用矩陣乘法再使設p點坐標為(x,y),將p點繞坐標原點逆時針用矩陣加法來完成此操作。如式(
5、3)所示。旋轉θ角度后得點p',設p'坐標為(x',y')。借助幾0-1232()+=(3)10()1()4()62011年6月28日收到其變化過程可用圖1表示:作者簡介:劉婧(1982—),四川成都人,碩士,渭南師范學院數(shù)學與信息科學學院教師,研究方向:基礎數(shù)學。6744科學技術與工程11卷圖樣從A11到A33的三行三列表示了三維坐標的線性變換組合。而A14、A24、A34表示了三維坐標的平移。采用類似式(1)的推導可得出三維坐標以z軸為軸旋轉θ角(無平移)的仿射矩陣為式(7)所示。cosθ-sinθ00???sinθcosθ00÷
6、?÷(7)?0010÷?÷è0001?三維坐標以x和y軸為軸旋轉θ角(無平移)的仿射圖1旋轉平移仿射矩陣為式(8)和式(9)所示。仿射變換是一個線性變換(與2×2矩陣相乘)1000??外加一個平移變換(與1×2矩陣相加)。將仿射變?0cosθ-sinθ0÷?÷(8)換存儲于一對矩陣(一個用于線性部分,一個用于?0sinθcosθ0÷?÷平移)的替換方案是將整個變換存儲于3×3矩陣。è0001?若要使其起作用,平面上的點必須存儲于具有虛擬cosθ0-sinθ0??第三坐標的1×3矩陣中。通常的方法是使所有的?0100÷?÷(9)第三坐標
7、等于1。例如上式可以表示為式(4)的?sinθ0cosθ0÷?÷形式。è001??0-13??2??2?三維坐標的任意旋轉變換都可以分解為以x,y,z為?÷?÷?÷1041=6(4)軸的旋轉的組合。所以知道了以上三個變換公式。??÷÷??÷÷??÷÷è001?è1?è1?其他的變換都可以組合得來。式(4)中最前面的3×3矩陣稱為仿射矩陣,其一般將式(7)、式(8)、式(9)的算法可定義一個如形式如式(5)所示。其中A11,A12,A21,A22構成的2×下的C++類Point3D來封裝:2矩陣表示了坐標的一般線性變換的組合。A13,A
8、23classPoint3D分別表示了x坐標和y坐標的平移量。其余元素固{public:定為0或1。floatx;?A11A12A13?floaty;?÷?A21A22A23÷(5)floatz;?÷è001?voidr