1.android测量数据
(1)android设备坐标系
按照上图所示,将手机平放在桌面上来看,手机的左下角是坐标原点,水平向右为x轴,水平向前为y轴,由x轴和y轴正方向叉乘形成的方向为z轴,当手机平放时,z轴指向天空的方向。(2)方向传感器
android的方向传感器可以获取3个数据。
orientation0:y轴在水平面上的投影偏离正北方向的角度,范围0~359度,正北为0,正东为90,正南为180,正西270。
orientation1:y轴和y轴在水平面上投影之间的角度,即y轴与水平面的夹角。
orientation2:x轴和x轴在水平面上投影之间的角度,即x轴与水平面的夹角。
(3)加速度传感器
android的加速度传感器可以获取3个数据。
accelerometerX:x轴方向的加速度-重力加速度在x轴上的分量。
accelerometerY:y轴方向的加速度-重力加速度在y轴上的分量。
accelerometerZ:z轴方向的加速度-重力加速度在z轴上的分量。
根据上述的两个传感器,能够测量出手机x,y,z轴相对于地面参照系的方向和手机相对于手机参照系的加速度。
因为我们项目的需要,要度量出手机相对于地面参照系的加速度,所以需要进行一些计算。
2.相对于地面参照系的加速度的计算
思路:将相对于手机坐标系的3个加速度相对于地面参照系的3个方向分解,再将分解后的加速度分量根据地面参照系的3个方向进行相加合成。得到相对于地面参照系的加速度。
在计算之前,先定义地面参照系的3个方向,垂直向上的方向为1,水平向北的方向为2,水平向东的方向为3.
(1)y轴
首先求y轴的单位向量在地面参照系中3个方向的分量。(这里的o1为orientation1,以此类推)
y0 = (-Math.sin(o1));
y1 = Math.cos(o1)*Math.cos(o0);
y2 = Math.cos(o1)*Math.sin(o0);
(2)x轴
temp = Math.acos(-(Math.tan(o1)*Math.tan(o2)));
x0 = (-Math.sin(o2));
x1 = Math.cos(o2)*Math.cos(o0+temp);
x2 = Math.cos(o2)*Math.sin(o0+temp);
(3)z轴
z0 = x2*y1-x1*y2;
z1 = x0*y2-x2*y0;
z2 = x1*y0-x0*y1;
(4)计算相对于地面参照系的3个方向的加速度(这里的ax为accelerometerX,以此类推)
a0 = ax*x0+ay*y0+az*z0+SensorManager.STANDARD_GRAVITY;(这里加上标准重力加速度以抵消默认的重力加速度)
a1 = ax*x1+ay*y1+az*z1;
a0 = ax*x2+ay*y2+az*z2
这样的a0,a1,a2数据即为手机相对于地面参照系的绝对加速度了。
(5)
当 x=y=0 时,手机处于水平放置状态。
当 x=0 并且 y>0 时,手机顶部的水平位置要大于底部,也就是一般接听电话时手机所处的状态。
当 x=0 并且 y<0 时,手机顶部的水平位置要小于底部。手机一般很少处于这种状态。
当 y=0 并且 x>0 时,手机右侧的水平位置要大于左侧,也就是右侧被抬起。
当 y=0 并且 x<0 时,手机右侧的水平位置要小于左侧,也就是左侧被抬起。
当 z=0 时,手机平面与水平面垂直。
当 z>0 时,手机屏幕朝上。
当 z<0 时,手机屏幕朝下。
(6)
方向传感器返回值的单位是角度,有三个值分别是
values[0]: 方位角
values[1]: 倾斜角
values[2]: 旋转角
如同加速度传感器一样,首先Android中 x,y,z 定义是以水平放置在的手机的右下脚为参照系坐标原点
x 方向就是手机的水平方向,右为正
y 方向就是手机的水平垂直方向,前为正
z 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负
(7)
方向角的定义是手机y轴 水平面上的投影 与 正北方向的夹角。 (值得范围是 0 ~ 359 其中0=North, 90=East, 180=South, 270=West)
倾斜角的定义是手机y轴 与水平面的夹角 (手机z轴向y轴方向移动为正 ,值得范围是 -180 ~ 180)
旋转角的定义是手机x轴 与水平面的夹角 (手机x轴离开z轴方向为正, 值得范围是 -90 ~ 90)
(8)
需要注意的是,由于地球固有的重力加速度g (值为9.8 m/s^2),
因此现实中实际加速度值应该是 z方向返回值 - 9.8 m/s^2.
比如你以 2 m/s^2 的加速度将手机抛起,这时z方向的返回值应该是 11.8 m/s^2.
反之若以手机以2 m/s^2 的加速度坠落,则z方向的返回值应该是 7.8 m/s^2.
x,y方向则没有上述限制。
发表评论
-
ScrollView嵌套Edittext
2015-04-08 18:26 788scrollview 中加入多个控件如 edittext 后会 ... -
android 布局式跑马灯,非TextView
2015-04-07 10:51 450如题,简单的实现了跑马灯效果,把Scroll.java放入an ... -
Android圆角图片
2015-03-11 17:44 649my_wane_shape.xml 快速圆角背景边框实现, ... -
SQLite多线程读写实践及常见问题总结
2015-02-13 17:06 900基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了一 ... -
MatrixCursor的使用
2015-01-19 09:49 1013ContentProvider对外共享数据的时候的query( ... -
Android 获取控件的宽高高级用法(MeasureSpec)
2015-01-15 14:23 937一个MeasureSpec封装了父 ... -
Android_GridView_GridView概述及实现水平滑动
2015-01-14 17:14 11161.GridView简介 GridView是ViewGroup ... -
Android MMS,SMS之常用Uri
2014-09-19 16:32 1289Android MMS,SMS之常用Uri Android ... -
android短彩信查询以及MMS表结构
2014-09-19 16:31 2103android短信的数据库的Uri是不公开的, 读取起来时灰常 ... -
使用Android自带DownloadManager下载文件
2014-08-19 11:04 733SDK在API Level 9中加入了DownloadMan ... -
android textview里链接点击事件,增加图片
2014-08-07 16:45 1100Android系统默认给TextView插入图片提供了三种方 ... -
android Home事件汇总
2014-07-18 11:30 963方法一:android 4.0以后无法通过更改页面的类型来 ... -
Android风格与主题(style and theme)
2014-07-16 16:35 637Android xml风格和主题文 ... -
Android中播放声音的两种方法
2014-05-30 15:09 607在Android中,音频、视 ... -
android 杀进程方法
2014-05-26 17:43 972关闭应用的方法: 1.System.exit(0); ... -
android service 生命周期
2014-04-21 16:16 737有了 Service 类我们如何启动他呢,有两种方法: ... -
解决ADB端口被占用的问题
2014-04-21 16:14 783究其源就是adb server没启动 经过分析整理如下: ... -
输入法隐藏打开
2013-12-23 14:24 765首次进入activity,如果有个edittex ... -
google经纬度互转
2013-07-11 16:34 894https://developers.google.com/ ... -
android 安装删除软件
2013-07-08 17:19 11111、 Android.mk文件 LOCAL_PA ...
相关推荐
android的一个加速度感应实现的平衡球的好例子
android:加速度感应器源码, 三个方向的加速度,
博客附码:http://blog.csdn.net/gogler/article/details/7032009 用于收集android感应器数据的程序,附带一个比较完整的文件操作类。
通过采集不同使用姿态下的手机重力感应器、线性加速度感应器、加速度感应器和陀螺仪的数据,得到模型的训练数据。训练出来的模型使用fastapi进行API发布部署,手机采集传感器数据后post到服务端,服务端识别出姿态后...
本文实例讲述了Android基于Sensor感应器获取重力感应加速度的方法。分享给大家供大家参考,具体如下: FETC项目指导老师提出了新的需求,想要在游戏地图中表现出用户用户当期移动的方向,再用GPS的话显然很不靠谱,...
android Sensor各种感应器源码 加速度感应器,重力,方向。磁场感应器
感应器负责侦测存储器的状态,计算存储器的重力加速度值;处理器则对加速度值是否超出安全范围进行判断;而控制器则负责控制将磁头锁定或者释放出安全停泊区。一旦感应器侦测并经处理器判断当前的重力加速度超过安全...
人的反射神经决定了人快速动的极限,怎么都不可能两步之间小于0.2秒,因此间隔小于0.2秒的波峰波谷直接跳过通过重力加速计感应,重力变化的方向,大小。与正常走路或跑步时的重力变化比对,达到一定相似度时认为是在...
人的反射神经决定了人快速动的极限,怎么都不可能两步之间小于0.2秒,因此间隔小于0.2秒的波峰波谷直接跳过通过重力加速计感应,重力变化的方向,大小。与正常走路或跑步时的重力变化比对,达到一定相似度时认为是在...
重力感应主要是依靠手机的加速度传感器(accelerometer)来实现 在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器。因为很多功能用户根本不care的所以可能开发商会把某些功能屏蔽掉。还是得...
项目功能 设置系统铃声作为报警音、提示音 手势解锁 按键解锁:锁屏状态按键解锁 音量锁定 屏蔽关机 闪光灯开关 振动开关 报警模式:口袋模式/重力感应/光感应 ...混合模式:加速度传感器,距离传感器,口袋模式组合监控
Android 重力感应传感器控制源码,作者信息:Himi,加速度传感器 ,也称为重力传感器,源代码编译环境需要SDK 1.5(api 3)支持。此重力感应传感器不仅对玩家旋转手机的动作可以检测到,而且会根据反转手机的程度,得到...
前面一篇《Android基于Sensor感应器获取重力感应加速度的方法》我们介绍了sensor的基本知识以及一个使用其中加速度感应器获取数据的例子。 前面提到过一个问题,就是说感应器刷新频率太快,假如我们要做一个UI中,...
Android 手机重力传感器调用 源码,作者:Himi,手机加速度传感器 ,也称为重力传感器,自SDK 1.5(api 3)就支持传感器了。解释:此传感器不仅对玩家反转手机的动作可以检测到,而且会根据反转手机的程度,得到传感器的...
重力感应主要是依靠手机的加速度传感器(accelerometer)来实现 在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器。因为很多功能用户根本不care的所以可能开发商会把某些功能屏蔽掉。还是得...
传感器Sensor是一系列感应器...因为具体的感应信息依赖于相关硬件,所以虽然Android定义了众多感应器,但是不是所有的Android手机或平板都能支持这么多的感应器,千元以下的低端手机往往只只能支持加速度等少数感应器。
案例为一个足球场背景,上面有一颗旋转的足球,可以通过重力感应来控制足球移动方向。代码每一行都带有注释,方便下载者理解。
一个android 重力感应的demo