標籤:
想要從入門到精通一門語言,最好的學習文檔就是官方提供的文檔,比如說OpenCV的學習,最權威的學習資料還是其官方的學習文檔,C#和.net的最好的學習入門文檔還是MSDN。但是好多人一開始真的不會用,所以忽略了這寶貴的材料,而去學習一些其它的亂七八糟的資料或者書籍。
我也是剛瞭解到MSDN的一個提示:如果你想查一個類的用法或者一些類的用法,直接在MSDN中找這個類所在的命名空間,它能告訴你相關的好多東西。下面就來開一下在System.Drawing.Drawing2D這個命名空間下的Matrix類。
概述:
這個類封裝表示幾何變換的3x3仿射矩陣。此類不能被繼承。
命名空間:System.Drawing.Drawing2D
程式集:System.Drawing(在System.Drawing.dll中)
用法:
在GDI+中,可以在Matrix對象中儲存仿射變換。由於表示仿射變換的矩陣的第三列總是(0,0,1),因此在構造Matrix對象時,只需要指定前兩列的6個數。語句:
Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4)
構造下面圖形中顯示的矩陣。
複合變換
複合變換是一個接一個的變換序列,看看下面列表中的矩陣和變換(矩陣的本質是其所在空間的一種躍遷(變換)):
| 矩陣A |
旋轉90度 |
| 矩陣B |
在x方向上縮放2倍 |
| 矩陣C |
在y方向上平移3個單位 |
在仿射空間中,如果從由矩陣[2 1 1]表示的點(2,1)開始,先後乘以A、B、C,在點(2,1)將按列出的順序經曆三種變換。
[2 1 1]ABC = [-2 5 1]
可以不將複合變換的三部分儲存於三個獨立的矩陣,而是一起乘以A、B和C來得到儲存整個複合變換的單個的3x3矩陣。假定ABC=D,則一個點乘以D得出的結果與一個點先後乘以A、B、C的結果相同。
[2 1 1]D = [-2 5 1]
顯示了矩陣A、B、C和D
複合變換的矩陣可以通過將幾個單獨的變換矩陣相乘而得到,這就意味著任何仿射變換的序列均可儲存於單個的Matrix對象中。
注意:複合變換的順序非常的重要。一般來說,先旋轉、在縮放、然後平移,與先縮放、再旋轉、然後平移是不同的。同樣,矩陣相乘的順序也是重要的。這就對應著矩陣ABC與BAC一般不同。
Matrix類提供了幾種構建複合變換的過程:Multiply、RotateAt、Rotate、Scale、Shear和Translate。下面的樣本建立了一個複合變換(先選裝30度,再在y方向上縮放2倍,讓後在x方向上平移5個單位)的矩陣。
Matrix myMatix = new Matix();//將Matrix類的一個新執行個體初始化為單位矩陣
myMatrix.Rotate(30);
myMatix.Scale(1, 2, MatrixOrder.Append);
myMatix.Translate(5, 0, MatrixOrder.Append);
其中MatrixOrder的兩個屬性還不知道具體怎麼玩?以後探討。
連結地址:https://msdn.microsoft.com/zh-cn/library/system.drawing.drawing2d.matrix(v=vs.110).aspx
https://msdn.microsoft.com/zh-cn/library/system.drawing.drawing2d.matrixorder(v=vs.110).aspx
[C#參考]Matrix類