- - 溫濕度模塊/探頭(21)
- - 溫濕度數(shù)字輸出模塊(6)
- - 濕敏電容傳感器(3)
- - 濕敏電阻傳感器(3)
- - 溫度傳感器(4)
- - 溫濕度變送器/儀表(10)
- - 結露傳感器(2)
- - 紅外溫度傳感器(3)
- - 光纖折射率傳感器(1)
- - 光纖信號調理器(5)
- - 光纖溫度傳感器(3)
- - 光纖壓力傳感器(9)
- - 光纖應變傳感器(3)
- - 光纖位移傳感器(1)
- - 紅外發(fā)射二極管(5)
- - 光電晶體(接收管)(4)
- - 光電斯密特接收管(2)
- - 紅外檢測儀(1)
- - 編碼器傳感器(1)
- - 反射式光電套件(2)
- - 槽型紅外光電傳感器(2)
- - 條形碼傳感器(1)
- - 血氧分析傳感器(2)
行業(yè)資訊
加速度傳感器解讀
2010-12-24 16:34:09
加速度傳感器
在Windows Phone 7的硬件規(guī)格中已經成為一種標配,有了加速度傳感器,就可以根據(jù)地球引力來仿真現(xiàn)實生活中的許多操作。譬如說我們傾斜手機,就可以實現(xiàn)手機向傾斜的方向移動。還有我們可以揮動手機,實現(xiàn)游戲中保齡球的揮出操作等等功能。搖晃手機實現(xiàn)圖片和背景圖片的更換,一切只限于你的想象力。因此掌握加速度傳感器的編程也是XNA游戲開發(fā)的必經之路。
WP7上的加速度傳感器輸出可以用一個3D空間的矢量來描述,這里要注意下,在XNA中存在三維的矢量類型,而Silverlight是不存的。本文除了將給出Platformer的加速度感應器代碼外,還將深入WP7的加速度感應器的概念,讓你在以后的項目開發(fā)中可以快速切入。
當一個三維的點坐標(x,y,z)表示空間一個特定的位置時,矢量(x,y,z)代表的意義則更加豐富,它包含了方向和長度的概念。很明顯點坐標和矢量是有關聯(lián)的。矢量(x,y,z)的方向就是點(0,0,0)到點(x,y,z)的方向。但是矢量(x,y,z)并不是由點(0,0,0)到點 (x,y,z)構成的那條直線,而只是代表這條直線的方向。
矢量(x,y,z)的長度我們可以使用勾股定理快速獲取,下面是計算的數(shù)學表達式。
在使用加速度傳感器時,我們可以把WP7手機想像成一個三維的坐標系統(tǒng)。無論電話放置的方向的什么,Y坐標軸是電話的底端(包含按鈕的那端)到頂端的方向,而且這個走向是是X軸正方向。X坐標軸則是從左至右的走向,這個走向亦是正方向,Z坐標軸正走向則是面對你的方向。
下面是WP7三維矢量坐標的標示圖:
這是一個我們在實際生活和數(shù)學中都經常使用的經典三維坐標系統(tǒng),XNA中的3D編程也采用了這種坐標方法。這種坐標系統(tǒng)有一個專業(yè)術語,被稱作笛卡爾右手坐標系統(tǒng)。
笛卡爾右手坐標系統(tǒng)的意思就是將右手背對著手機屏幕放置,拇指即指向X軸的正方向。伸出食指和中指,食指指向Y軸的正方向,中指所指示的方向即是Z軸的正方向。有點類似面對自己的蘭花指造型,大家可以看看示意圖。
這種坐標朝向永遠是固定的,無論你是將手機是橫拿還是豎放,又或者游戲是在Landscape和Portrait模式下運行,均如此。你只需要記住前面強調的兩點,無論電話放置的方向的什么,Y坐標軸是電話的底端(具備開始按鈕的那端)到頂端的走向,而且這個方向是是X軸正方向。X坐標軸則是從左至右的走向,這個走向亦是正方向。再使用右手定理,就可以很快地確定Z的坐標軸走向了。
正如你想象的那樣,Windows Phone 7應用程序的在屏幕選擇時會自動切換正是由加速度傳感器實現(xiàn)的。如果你的手機是靜止的,加速度傳感器的矢量方向永遠是指向地心的,如果矢量的長度為1的話,我們稱之為1G。當你著正拿著WP7手機時,加速度傳感器的矢量為(0,-1,0),方向指向地心。逆時針旋轉90度,加速度傳感器矢量變?yōu)?(-1,0,0)。再逆時針旋轉90度又變?yōu)椋?,1,0)。
當你將手機朝上平放在桌面上時,加速度傳感器矢量為(0,0,-1)。這些值也就是Windows Phone 7仿真器經常報告的矢量。
正常拿著時,加速度傳感器矢量為(0,-1,0)
右Landscape模式時,加速度傳感器矢量為(1,0,0)
左Landscape時,加速度傳感器矢量為(-1,0,0)
向右傾斜45度時,加速度傳感器矢量為(0.7,-0.7,0)。這樣使用勾股定理正好得到矢量長度為1
當然,加速度傳感器矢量很少能達到這種類似(0,-1.0)這種精確度,其長度不可避免會有些出入。在WP7手機靜止時,加速度傳感器矢量長度會有一定的誤差。當你在訪問月球時使用WP7的話,你可能會認為矢量速度為0.17這個大概的區(qū)域(月球重力為地球的1/6),但是這個數(shù)值主要還是取決于手機的加速度傳感器品質。
前面談論的加速度感應器矢量都是在手機靜止狀態(tài)下發(fā)生的,加速度感應器矢量還可以指向其它的一些方向,當手機在快速運動時其矢量長度也會發(fā)生或大或小的變化。
比如說,當你猛地將手機向左移動時,如果手機的速度一直處于增大時,加速度傳感器矢量將指向右。但當手機的移動速度穩(wěn)定時,加速度傳感器矢量的長度又變?yōu)橹亓Υ笮?。當你最后減速時,加速度傳感器矢量的方向一直保持左邊,直到手機完全停止為止。
還有一種情況就是當手機自由落體時,原理上可認為此時加速度傳感器矢量的長度為0。
在程序開發(fā)過程中需要和加速度傳感器打交道時,你首先要引用Microsoft.Devices.Sensors這個dll文件。此外,WMAppManifest.xml這個文件還需要包含
我們知道Platformer游戲中,是使用加速度傳感器的來確定英雄的移動方向,以及移動的速度,這和你傾斜手機的角度有著密切的關系。我們需要對加速度傳感器返回的矢量值進行處理,以實現(xiàn)仿真現(xiàn)實場景的移動效果。此外,當程序運行在模擬器上時,我們可以使用電腦鍵盤的方向鍵來仿真加速度傳感器。