- - 温湿度模块/探头(21)
- - 温湿度数字输出模块(6)
- - 湿敏电容传感器(3)
- - 湿敏电阻传感器(3)
- - 温度传感器(4)
- - 温湿度变送器/仪表(10)
- - 结露传感器(2)
- - 红外温度传感器(3)
- - 光纤折射率传感器(1)
- - 光纤信号调理器(5)
- - 光纤温度传感器(3)
- - 光纤压力传感器(9)
- - 光纤应变传感器(3)
- - 光纤位移传感器(1)
- - 无放大输出压力传感器(2)
- - 放大输出压力传感器(2)
- - 微压传感器(1)
- - 不锈钢压力传感器(1)
- - 数字输出的压力传感器(3)
- - 称重传感器(3)
- - 陶瓷压力传感器(2)
- - 硅蚀刻技术全系列压力传感器(9)
- - PC板安装压力传感器(9)
- - 压力变送器(5)
- - 红外发射二极管(5)
- - 光电晶体(接收管)(4)
- - 光电斯密特接收管(2)
- - 红外检测仪(1)
- - 编码器传感器(1)
- - 反射式光电套件(2)
- - 槽型红外光电传感器(2)
- - 条形码传感器(1)
- - 血氧分析传感器(2)
行业资讯
加速度传感器解读
2010-12-24 16:34:09
加速度传感器
在Windows Phone 7的硬件规格中已经成为一种标配,有了加速度传感器,就可以根据地球引力来仿真现实生活中的许多操作。譬如说我们倾斜手机,就可以实现手机向倾斜的方向移动。还有我们可以挥动手机,实现游戏中保龄球的挥出操作等等功能。摇晃手机实现图片和背景图片的更换,一切只限于你的想象力。因此掌握加速度传感器的编程也是XNA游戏开发的必经之路。
WP7上的加速度传感器输出可以用一个3D空间的矢量来描述,这里要注意下,在XNA中存在三维的矢量类型,而Silverlight是不存的。本文除了将给出Platformer的加速度感应器代码外,还将深入WP7的加速度感应器的概念,让你在以后的项目开发中可以快速切入。
当一个三维的点坐标(x,y,z)表示空间一个特定的位置时,矢量(x,y,z)代表的意义则更加丰富,它包含了方向和长度的概念。很明显点坐标和矢量是有关联的。矢量(x,y,z)的方向就是点(0,0,0)到点(x,y,z)的方向。但是矢量(x,y,z)并不是由点(0,0,0)到点 (x,y,z)构成的那条直线,而只是代表这条直线的方向。
矢量(x,y,z)的长度我们可以使用勾股定理快速获取,下面是计算的数学表达式。
在使用加速度传感器时,我们可以把WP7手机想像成一个三维的坐标系统。无论电话放置的方向的什么,Y坐标轴是电话的底端(包含按钮的那端)到顶端的方向,而且这个走向是是X轴正方向。X坐标轴则是从左至右的走向,这个走向亦是正方向,Z坐标轴正走向则是面对你的方向。
下面是WP7三维矢量坐标的标示图:
这是一个我们在实际生活和数学中都经常使用的经典三维坐标系统,XNA中的3D编程也采用了这种坐标方法。这种坐标系统有一个专业术语,被称作笛卡尔右手坐标系统。
笛卡尔右手坐标系统的意思就是将右手背对着手机屏幕放置,拇指即指向X轴的正方向。伸出食指和中指,食指指向Y轴的正方向,中指所指示的方向即是Z轴的正方向。有点类似面对自己的兰花指造型,大家可以看看示意图。
这种坐标朝向永远是固定的,无论你是将手机是横拿还是竖放,又或者游戏是在Landscape和Portrait模式下运行,均如此。你只需要记住前面强调的两点,无论电话放置的方向的什么,Y坐标轴是电话的底端(具备开始按钮的那端)到顶端的走向,而且这个方向是是X轴正方向。X坐标轴则是从左至右的走向,这个走向亦是正方向。再使用右手定理,就可以很快地确定Z的坐标轴走向了。
正如你想象的那样,Windows Phone 7应用程序的在屏幕选择时会自动切换正是由加速度传感器实现的。如果你的手机是静止的,加速度传感器的矢量方向永远是指向地心的,如果矢量的长度为1的话,我们称之为1G。当你着正拿着WP7手机时,加速度传感器的矢量为(0,-1,0),方向指向地心。逆时针旋转90度,加速度传感器矢量变为 (-1,0,0)。再逆时针旋转90度又变为(0,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这个大概的区域(月球重力为地球的1/6),但是这个数值主要还是取决于手机的加速度传感器品质。
前面谈论的加速度感应器矢量都是在手机静止状态下发生的,加速度感应器矢量还可以指向其它的一些方向,当手机在快速运动时其矢量长度也会发生或大或小的变化。
比如说,当你猛地将手机向左移动时,如果手机的速度一直处于增大时,加速度传感器矢量将指向右。但当手机的移动速度稳定时,加速度传感器矢量的长度又变为重力大小。当你最后减速时,加速度传感器矢量的方向一直保持左边,直到手机完全停止为止。
还有一种情况就是当手机自由落体时,原理上可认为此时加速度传感器矢量的长度为0。
在程序开发过程中需要和加速度传感器打交道时,你首先要引用Microsoft.Devices.Sensors这个dll文件。此外,WMAppManifest.xml这个文件还需要包含
我们知道Platformer游戏中,是使用加速度传感器的来确定英雄的移动方向,以及移动的速度,这和你倾斜手机的角度有着密切的关系。我们需要对加速度传感器返回的矢量值进行处理,以实现仿真现实场景的移动效果。此外,当程序运行在模拟器上时,我们可以使用电脑键盘的方向键来仿真加速度传感器。