android重力传感器简介:
android的重力传感器在各个方面有很广的应用,在android中,重力传感器使用惯性坐标系,所谓惯性坐标系是为了简化世界坐标而引入的一种新的坐标系。惯性坐标系的原点和物体坐标坐标系原点重合,但惯性坐标系的轴平行于世界坐标系的轴。
在三维空间中我们使用左手坐标系 +x向右,+y向上,+z向前,在欧拉角中,表示一个物体的方位用“Yaw-Pitch-Roll”约定,就是在系统中存在Yaw角,Pitch角,Roll角,这三个空间角都满足左手定则,以左手定则的方向为正方向,Yaw绕y轴旋转,Pitch绕x轴旋转,Roll绕z轴,重力传感器就是返回value[0],value[1],value[2]分别对应Yaw角,Pitch角,Roll角。即角位移,在这里需要注意的是返回的角度是弧度制,如果需要使用android的Math类的cos和sin需要转换成角度制,即角度*PI/180
android重力传感器的模拟器测试:
在模拟器上,本来是模拟不了我们摇晃手机的手势的,我们使用“sensorsimulator-1[1].0.0-beta1”(用这个文件名可以搜到一个压缩包),下载之,解压之
sensorsimulator-1.0.0-beta1\lib\sensorsimulator-lib.jar我们导入到工程文件中去
sensorsimulator-1.0.0-beta1\bin\SensorSimulatorSettings.apk安装至我们的android模拟器中(命令行adb install SensorSimulatorSettings.apk 你懂得)
sensorsimulator-1.0.0-beta1\bin\sensorsimulator.jar运行之,运行android模拟器中的SensorSimulatorSettings.apk,连接ip即可模拟
程序中,引入import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;
创建变量SensorManager mySensorManager
初始化
mySensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
mySensorManager.connectSimulator();
注册
mySensorManager.registerListener( //注册监听器
mySensorListener, //监听器对象
SensorManager.SENSOR_ORIENTATION, //传感器类型
SensorManager.SENSOR_DELAY_UI //传感器事件传递的频度
);
由此就可以模拟了,不过在上机检测时,一定要去掉这些代码,不然程序就报错了
android重力传感器使用
创建SensorListener类的内部类,实现onSensorChanged,获得的参数就有value[0],value[1],value[2].
我目前看到的比较好的处理这三个角的方法就是使用矩阵的乘积使用重力向量矩阵[x,y,z,1]和相应轴的变换矩阵4*4相乘得到相应的矩阵,很好的方法
其实具体怎么使用还是看大家的要求
刚开始写blog,就是为了提高技术,希望和大家探讨