新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Android中的Matrix類介紹

        Android中的Matrix類介紹

        作者: 時間:2016-09-12 來源:網絡 收藏

        Matrix顧名思義就是大學的線性代數中的矩陣,關于矩陣的基本知識和加減乘除運算這里不再贅述。

        本文引用地址:http://www.104case.com/article/201609/304414.htm

        Android中的Matrix類是一個比較簡單的3x3的3階矩陣,結構如下:

        float matrix = {MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y,

        MPERSP_0, MPERSP_1, MPERSP_2 };

        結構如上:其中 MSCALE_X和MSCALE_Y分別是控制X軸和Y軸方向的縮放,MSKEW_X和MSKEW_Y是分別控制X坐標和Y坐標的線性傾斜系數,MTRANS_X和MTRANS_Y則是控制X方向和Y方向的線性平移。MPERSP_0、MPERSP_1和MPERSP_2暫時使用不多,以后補充說明。

        有了上訴描述了,所謂的矩陣變換主要就是針對這個3階矩陣進行算術運算了!如平移操作從(0,0)平移到(10,120)則直接將上述矩陣的MSCALE_X=10和MSCALE_Y=120即可Matrix.setValues(matrix數組)。這樣Canvas就可以使用該矩陣進行繪圖操作,實現平移。

        其中旋轉矩陣比較特殊的,其結構如下:

        float matrix = {cosA, -sinA, 0, sinA, cosA, 0,

        0, 0, 1 }; 其中A為旋轉的角度,如需旋轉操作只需將角度傳入上述矩陣即可。

        同時我們知道矩陣的乘法是不對稱的,即A*B !=B*A,這樣的話就涉及到矩陣乘法中的左乘和右乘了,同樣Android中Matrix中也實現了左乘和右乘的函數,所有postXXX均為左乘運算,所有preXXX均為右乘運算。這點在我們使用Matrix進行組合變換時需要注意的問題。

        同時由于矩陣對象最后的狀態是進過所有變換后運算獲得的矩陣,所有如果你需要重新使用該矩陣又不想保留之前的狀態時,需要調用reset()重置矩陣的狀態,以免發生錯誤。同時需要注意的是Matrix類的setXXX方法都會默認調用reset()進行矩陣的重置,所以在實現組合變換時一點要注意不要在變換的中間調用setXXX方法,這樣setXXX方法之前的變換都被忽略了。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 镇远县| 三穗县| 永定县| 肇源县| 梁平县| 阳朔县| 雅安市| 东乌珠穆沁旗| 集贤县| 周口市| 确山县| 民和| 遂平县| 美姑县| 通许县| 红原县| 长治市| 广平县| 聊城市| 会理县| 衡水市| 宽城| 金湖县| 酉阳| 积石山| 丹江口市| 五家渠市| 黄龙县| 杭锦旗| 南城县| 大冶市| 鄂温| 广河县| 将乐县| 扶沟县| 大竹县| 恩平市| 兴仁县| 东明县| 增城市| 青冈县|