磁倾仪,也叫倾斜仪,主要用来检测手机设备在各个轴上旋转的角度。注意,磁倾仪与陀螺仪的差异,陀螺仪的关注点是旋转的角速度,它并不关注角度,只注重速度。而磁倾仪的读数就是设备倾斜的角度。

不管是使用重力感应器,方向感应器,还是陀螺仪、磁倾仪,我们首先必须知道相对于手机设备的坐标系。为了能更加直感,我画了个草图,也比较难看,望见谅。

你拿着手机,让手机垂直放置,并且屏幕对着你,可以用来照镜子。当你拿着手机照镜子时,坐标原点在手机的左下角。

1、从手机左下角,水平方向为X轴,向右为正值,向左为负值;

2、垂直方向为Y轴,往上为正值,往下为负值;

3、Z轴与手机屏幕垂直。当你拿着手机照镜子时,Z轴的正方向正指着你。

当你握着手机左右摇动时,就是绕着Y轴旋转;当你拿着手机前后翻时,就绕着X轴旋转;当你把手机放在水平桌面上转动时,就绕着Z轴旋转。

磁倾仪封装在Windows.Devices.Sensors命名空间下的Inclinometer类中,磁倾仪的读数由InclinometerReading类来包装。

PitchDegrees属性:围绕X轴旋转的角度,单位是角度。

RollDegrees属性:围绕Y轴旋转的角度。

YawDegrees属性:围绕Z轴旋转的角度。

和其他传感器的使用一样,第一步,通过GetDefault方法得到相应传感器的实例引用。

Inclinometer _inclinometer = null;
……
// 初始化倾斜仪
_inclinometer = Inclinometer.GetDefault();

然后设置报告读数的时间间隔,单位为毫秒,一般20毫秒以上的值就可以了,没有必要设备得太小,最小值不能小于MinimumReportInterval属性的值。

 _inclinometer.ReportInterval = ;

最后,处理ReadingChanged事件,以读取最新的读数。

        Window.Current.VisibilityChanged += CurrentWindow_VisibilityChanged;
……
private void CurrentWindow_VisibilityChanged ( object sender, Windows.UI.Core.VisibilityChangedEventArgs e )
{
if (e.Visible)
{
_inclinometer.ReadingChanged += _inclinometer_ReadingChanged;
}
else
{
_inclinometer.ReadingChanged -= _inclinometer_ReadingChanged;
}
}
        async void _inclinometer_ReadingChanged ( Inclinometer sender, InclinometerReadingChangedEventArgs args )
{
// 获取读数
}

通过事件参数InclinometerReadingChangedEventArgs的Reading属性可以得到包含读数的InclinometerReading对象引用,就可以取得手机围绕各个坐标轴转动的角度了。

大家要注意的是,

a、当围绕Z轴旋转时,0或360度是指向磁北极的,方向为逆时钟旋转,这个与罗盘有点像;

b、当围绕X轴旋转时,当手机水平放时(屏幕向着天空),为0度。当手机向你这边翻动时,为正值,0到180度;当手机向外翻时(背对着你),为负值,0到-180度;

c、当围绕Y轴转动时,向左转为负值,0到-90度;向右转为正值,0到90度。

为了能更好地理解磁倾仪的读数,我特地邀请了孙大圣来向大家表演一下筋斗云。详见示例代码。

     

    

看完孙大圣精彩的表演后,相信你对磁倾仪会有一个更直观的认知。

示例源码:http://files.cnblogs.com/tcjiaan/InclinometerApp.zip

【WP开发】使用磁倾仪的更多相关文章

  1. WP开发资源

    wp开发:连续两次点击返回键退出程序的设计: http://hi.baidu.com/youngytj/item/6be317719cc371306cc37ce4 X http://www.cnblo ...

  2. WP开发笔记——WP7 SDK使用技巧

    俗话说的好,工欲善其事,必先利其器. 入门WP开发之前,免不了要先接触开发环境和开发工具.使用WP7 SDK进行开发,我们需要掌握SDK的一些实用技巧,以便我们的开发. 一.开启/关闭电脑键盘输入 W ...

  3. 在知乎回答的一个问题:C#初学者以后往WP开发走,还是往unity3d走?哪个更有前景呢

    问题原文:我是一个C#初学者,想问个问题,我以后是该往WP开发方向走呢还是学习Unity3D往游戏开发,哪个更有前景呢,个人感觉未来几年iOS,WP,Java会三足鼎立,WP现在有潜力,但是U3D现在 ...

  4. WP开发使用BingMaps地图服务

    原文:WP开发使用BingMaps地图服务 WP8使用BingMaps地图在 SOAP服务如何计算路径 首先需要用到3个服务 1.GeoCode服务-转换地址到地理的经纬度(WebServices地址 ...

  5. WP 开发中.xaml 与.xaml.cs

    关于 WP 开发中.xaml 与.xaml.cs 的关系   今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: ...

  6. 系统不支持WP开发

    好伤心,,,系统不支持WP开发... 买的ThinkPad S5 自带的win8,既不属于专业版,也不属于家庭版,,不属于各种版本. 其他条件都满足了.. 难道我要还系统吗??

  7. asp.net简述WP开发模式

    详情请参考菜鸟教程:http://www.runoob.com/aspnet/aspnet-tutorial.html 1.ASP.NET 是一个使用 HTML.CSS.JavaScript 和服务器 ...

  8. 关于 WP 开发中.xaml 与.xaml.cs 的关系

    今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...

  9. 【WP开发】读写剪贴板

    在WP 8.1中只有Silverlight App支持操作剪贴板的API,Runtime App并不支持.不过,在WP 10中也引入了可以操作剪贴板的API. 顺便说点题外话,有人会说,我8.1的开发 ...

随机推荐

  1. TortoiseSVN客户端使用说明

    TortoiseSVN客户端使用说明 TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中,下面对TortoiseSVN的菜单项做简要的说明.01.SVN Checkout ...

  2. Ubuntu下移植OpenCv

    通过近一周的时候终于成功交叉编译opencv成功了,真心不容易.有一句话乃真理也,凡事贵在坚持.过程总是痛苦的,因为不懂得很多问题但是又需要面对很多问题,最大的收获就是耐心解决所有问题后就懂得这些了. ...

  3. vertica在电信的应用

    本文介绍了什么 ´ 电信级大数据分析典型需求 ´ Vertica数据库特点及与其他数据库对比 ´ Vertica核心技术介绍 ´ 基于Vertica的典型分系统架构简介 电信级大数据分析典型需求 ´  ...

  4. #include <stdarg.h>

    名称描述相容  // 作用描述 va_start使va_list指向起始的参数 va_arg检索参数C89 va_end释放va_list va_copy拷贝va_list的内容 实例解析: #inc ...

  5. json 对c++类的序列化(自动生成代码)

    [动机] 之前写网络协议的时候,使用的是google protobuf,protobuf不但在性能和扩展性上有很好的优势,protoc自动生成c++类代码的工具,这点确实给程序员带来了很多便利. 做后 ...

  6. java 多线程--- Thread Runnable Executors

    java 实现多线程的整理: Thread实现多线程的两种方式: (1)继承 Thread类,同时重载 run 方法: class PrimeThread extends Thread { long ...

  7. javascript定时函数

    setTimeout(表达式,延迟时间)是定时程序,也就是在什么时间以后干什么,只做一次,就不做了.表达式为字符串函数或其它表达式,时间单位为毫秒 例子:setTimeout("f()&qu ...

  8. Replication的犄角旮旯(二)--寻找订阅端丢失的记录

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  9. 【读书笔记】.Net并行编程高级教程--Parallel

    一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...

  10. 全面理解Javascript闭包和闭包的几种写法及用途

    好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途.  一.什么 ...