在移动端开发过程中,有时候会用到陀螺仪传感器获取当前手机的姿态,下面给出iOS端如何获取陀螺仪姿态数据的代码:

  1. //根据陀螺仪的四元数转换为矩阵
  2. + (GLKMatrix4)calculateMatrixFromQuaternion:(CMQuaternion*)quaternion orientation:(AVCaptureVideoOrientation) orientation{
  3. float xx = quaternion->x * quaternion->x;
  4. float yy = quaternion->y * quaternion->y;
  5. float zz = quaternion->z * quaternion->z;
  6. float xy = quaternion->x * quaternion->y;
  7. float wz = quaternion->w * quaternion->z;
  8. float wy = quaternion->w * quaternion->y;
  9. float xz = quaternion->x * quaternion->z;
  10. float yz = quaternion->y * quaternion->z;
  11. float wx = quaternion->w * quaternion->x;
  12.  
  13. float r00 = - * (yy + zz);
  14. float r01 = * (xy - wz);
  15. float r02 = * (wy + xz);
  16. float r03 = ;
  17.  
  18. float r10 = * (xy + wz);
  19. float r11 = - * (xx + zz);
  20. float r12 = * (yz - wx);
  21. float r13 = ;
  22.  
  23. float r20 = * (xz - wy);//xy - wy
  24. float r21 = * (yz + wx);
  25. float r22 = - * (xx + yy);
  26. float r23 = ;
  27.  
  28. float r30 = ;
  29. float r31 = ;
  30. float r32 = ;
  31. float r33 = ;
  32.  
  33. return GLKMatrix4Make(r00,r01,r02,r03,
  34. r10,r11,r12,r13,
  35. r20,r21,r22,r23,
  36. r30,r31,r32,r33);
  37. }
  38.  
  39. //当前屏幕的方向
  40. @property (nonatomic, readwrite, assign) AVCaptureVideoOrientation orientation;
  41. //开启陀螺仪
  42. - (void)updateAngleFromAttitudeSensor{
  43. if(self.cmmotionManager){
  44.  
  45. }else{
  46. self.cmmotionManager = [[CMMotionManager alloc] init];
  47. self.cmmotionManager.deviceMotionUpdateInterval = 1.0/25.0;
  48. self.cmmotionManager.gyroUpdateInterval = 1.0/25.0;
  49. self.cmmotionManager.showsDeviceMovementDisplay = YES;
  50.  
  51. NSOperationQueue *mQueue = [[NSOperationQueue alloc]init];
  52. __weak typeof(self) wSelf = self;
  53. [wSelf.cmmotionManager startDeviceMotionUpdatesToQueue:mQueue withHandler:^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error){
  54. CMAttitude *attitude = motion.attitude;
  55. if (attitude == nil) {
  56. return;
  57. }
  58.  
  59. //UID
  60. CMQuaternion quaternion = attitude.quaternion;
  61. wSelf.sensorMatrix = GLKMatrix4Identity;
  62. wSelf.sensorMatrix = [GyroscopeUtil calculateMatrixFromQuaternion:&quaternion orientation:orientation];
  63.  
  64. wSelf.sensorMatrix = GLKMatrix4RotateX(wSelf.sensorMatrix,M_PI_2);
  65. wSelf.sensorInverseMatrix = GLKMatrix4Identity;
  66.  
  67. bool isInvertible = true;
  68. wSelf.sensorInverseMatrix = GLKMatrix4Invert(wSelf.sensorMatrix, &isInvertible);
  69. }];
  70. }
  71. }

iOS平台使用陀螺仪传感器的更多相关文章

  1. iOS开发——高级篇——传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

  2. 【android】移植IOS视图响应陀螺仪交互行为

    IOS有个很有趣味的特性:背景图片可以响应陀螺仪方向的变化,去改变X.Y轴上的值,从而让整个界面看着充满着灵性.具体步骤是:解锁苹果产品,在IOS7以上,摆动手势,观察桌面背景图片的变化. 刚好,我们 ...

  3. 通过OpenGL ES在iOS平台实践增强现实

    http://www.cnblogs.com/elvisyzhao/p/3398250.html 本文采用OpenGL ES 1固定渲染管线实现,目标为在设备拍摄到的现实世界中,绘制世界坐标轴,并根据 ...

  4. 通过OpenGL ES在iOS平台实践增强现实(一)

    http://ios.9tech.cn/news/2013/1108/38495.html 1.本文采用OpenGL ES 1固定渲染管线实现,目标为在设备拍摄到的现实世界中,绘制世界坐标轴,并根据设 ...

  5. iOS平台快速发布HT for Web拓扑图应用

    iOS平台一直是封闭的生态圈,iOS开发者要缴纳年费加入开发者计划才可进行iOS平台的APP开发测试,所开发的APP需要上传到App Store经过苹果审核以后才可对外发布.如果要开发企业内部应用,则 ...

  6. (译)cocos2d-x跨android&ios平台开发入门教程

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  7. [原创]自定义控件之AndroidSegmentControlView,仿IOS平台UISegmentControlView,继承自View

    版权声明:本文为博主原创文章,转载请注明出处. 控件简介 UISegmentControl在IOS平台的App中非常常见,其控件如下图所示: 这种控件的主要作用是动态的更改界面的显示内容,一般应用于内 ...

  8. [转]ios平台内存常见问题

    本文转自CocoaChina,说的满详细的: 链接地址:http://www.cocoachina.com/bbs/read.php?tid=94017&keyword=%C4%DA%B4%E ...

  9. U3D中IOS平台泛型方法尽少使用

    U3D的IOS最小运行库use micro mscorlib是不包含泛型反射方法的,如FieldType.GetGenericArguments方法.所以尽量少用List而直接使用array. 另外请 ...

随机推荐

  1. C# Redis Server分布式缓存编程 --网络转载

    这篇文章我将介绍如果用最简洁的方式配置Redis Server, 以及如何使用C#和它交互编程 一. 背景介绍 Redis是最快的key-value分布式缓存之一 缺点: 没有本地数据缓冲, 目前还没 ...

  2. [BZOJ 3123]森林

    这题和 COT1 一定有 JQ 喵~ 线段树的启发式合并,每次要连接两个点时就对比较小的那棵树暴力 DFS 一边 然后均摊时间依旧是 logn 的,均摊真是世界上最邪恶的东西了…… 然后这题的数据是要 ...

  3. phpstorm 配置 babel 支持EcmaScript6

    1.安装nodejs 2.npm install --save-dev babel-cli 3.npm install babel-preset-es2015 --save-dev 4.phpstor ...

  4. Lua词汇约定

    Lua的标识符包含数字,字母以及下划线,数字不能作为标识符的开头. and break do else elseif end false for function goto if in local n ...

  5. 转载:Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

    原文 http://www.powerxing.com/install-hadoop/ 当开始着手实践 Hadoop 时,安装 Hadoop 往往会成为新手的一道门槛.尽管安装其实很简单,书上有写到, ...

  6. putty+xming远程登录Ubuntu16.04图形界面

    前面我写过一篇<Ubuntu16.04 安装ftp服务器传输文件>的文章.文章当中已经可以远程访问linux服务器并且传输文件,然而要在putty中使用开启图形界面的命令到目前为止还是不够 ...

  7. cPage分页详细介绍

    asp.net中各种数据控件,datalist.gridview.Repeater等分页是最常用的功能,几乎任何一个B/S项目,无论是系统还是网站都会用到.分页时,读取整个数据,直接绑定到控件,都可以 ...

  8. android模拟器停在Waiting for HOME解决方案

    直接打开Android SDK Manager然后再从Android SDK Manager里的tools打开Android AVD Manager,删除掉在Eclipse里创建的模拟器.并在新建一个 ...

  9. LeetCode "Third Maximum Number"

    Straight-forward strategy.. please take care of all details - data type, assignment order etc. class ...

  10. ruby 中%Q %q %W %w %x %r %s的用法

    %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: "Fr ...