<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Android中的Matrix類介紹

          Android中的Matrix類介紹

          作者: 時間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

          Matrix顧名思義就是大學(xué)的線性代數(shù)中的矩陣,關(guān)于矩陣的基本知識和加減乘除運(yùn)算這里不再贅述。

          本文引用地址:http://www.ex-cimer.com/article/201609/304414.htm

          Android中的Matrix類是一個比較簡單的3x3的3階矩陣,結(jié)構(gòu)如下:

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

          MPERSP_0, MPERSP_1, MPERSP_2 };

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

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

          其中旋轉(zhuǎn)矩陣比較特殊的,其結(jié)構(gòu)如下:

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

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

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

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



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();