安卓坐标系转换之二:旋转角(欧拉角)
欧拉角是按照既定的顺序,如依次绕z,y,x分别旋转一个固定角度,使用roll,yaw ,pitch分别表示物体绕,x,y,z的旋转角度,可以完成一个坐标系转换成另一个坐标系。
但是在安卓中,这里的角度定义有所不同,原文如下:
Note: This definition is different from yaw, pitch and roll used in aviation where the X axis is along the long side of the plane (tail to nose).
也就是说,X轴与航空系统所定义的不同。安卓里的X轴是短边。
具体如下图:
注: 图中旋转方向只是示意方向,不是指定的正方向!!!
当手机坐标系与地球坐标系重合时,三个角度都为0。
- Azimuth:绕z轴旋转,磁北与y轴的夹角,顺时针增大,0到359度。
- Pitch:绕x轴旋转的角度,即手机上下旋转,y轴往z轴方向为正。-180到180度。
- Roll:绕y轴旋转的角度, 即手机的左右旋转,顺时针为正,-90到90度。
看一下getgetOrientation()方法,求出手机坐标系相对于世界坐标系三个轴的旋转角。
public static float[] getOrientation(float[] R, float[] values) {/** 4x4 (length=16) case:* / R[ 0] R[ 1] R[ 2] 0 \* | R[ 4] R[ 5] R[ 6] 0 |* | R[ 8] R[ 9] R[10] 0 |* \ 0 0 0 1 /** 3x3 (length=9) case://上篇文章讲到的旋转矩阵* / R[ 0] R[ 1] R[ 2] \* | R[ 3] R[ 4] R[ 5] |* \ R[ 6] R[ 7] R[ 8] /**/if (R.length == 9) {values[0] = (float) Math.atan2(R[1], R[4]);//azimuthvalues[1] = (float) Math.asin(-R[7]);//pitchvalues[2] = (float) Math.atan2(-R[6], R[8]);//roll} else {values[0] = (float) Math.atan2(R[1], R[5]);values[1] = (float) Math.asin(-R[9]);values[2] = (float) Math.atan2(-R[8], R[10]);}return values;}
这里三个角的计算不大好理解,我画几个示意图大致讲一下我的看法。
还望大家一起讨论。
首先复习一下上一节R矩阵的内容:
R[0] = Hx; R[1] = Hy; R[2] = Hz;//【地球坐标系】X方向,指东
R[3] = Mx; R[4] = My; R[5] = Mz;//【地球坐标系】Y方向,指北
R[6] = Ax; R[7] = Ay; R[8] = Az;//【地球坐标系】Z反方向,向下
首先看azimuth,代码如下:
values[0] = (float) Math.atan2(R[1], R[4]);
也就是arctan2(Hy,My)。 Hy是【地球坐标系】指向东的单位向量在【手机坐标系】Y轴上的分量。
同样地,My是【地球坐标系】指向北的单位向量在【手机坐标系】Y轴上的分量。
azimuth是绕z轴旋转,磁北与y轴的夹角,顺时针增大,0到359度。这里用了atan2函数,因为atan只可以表示−90o到90o−90o到90o-90^{o}到90^{o},atan2可以表示−180o到180o−180o到180o-180^{o}到180^{o}。具体详细的区别可以看这里。
示意图如下:
pitch的代码如下:
values[1] = (float) Math.asin(-R[7]);
也就是arcsin(-Ay).Ay是【地球坐标系】指向下(重力)的单位向量在【手机坐标系】Y轴上的分量。示意图如下:
roll的代码如下:
values[2] = (float) Math.atan2(-R[6], R[8]);
也就是arctan2(-Ax,Az).Ax【地球坐标系】指向下(重力)的单位向量在【手机坐标系】x轴上的分量。Az是【地球坐标系】指向下(重力)的单位向量在【手机坐标系】z轴上z的分量。
示意图如下:
这里需要指出的是,这个图的俯视方向是沿着y轴的正方向,所以本来是顺时针为正,这里是逆时针为负,所以也要加负号。
安卓坐标系转换之二:旋转角(欧拉角)相关推荐
- 地图定位偏移以及坐标系转换(二)-不同坐标系的转换
不同坐标系转换 // 定义一些常量 const x_PI = 3.14159265358979324 * 3000.0 / 180.0 const PI = 3.1415926535897932384 ...
- 直角坐标积分化为极坐标积分_将直角坐标系下的二次积分转换成极坐标系下的二次积分...
龙源期刊网 http://www.qikan.com.cn 将直角坐标系下的二次积分转换成极坐标系 下的二次积分 作者:朱清芳 来源:<科技信息 · 上旬刊> 2017 年第 06 期 摘 ...
- Unity3D 数学知识 (向量,坐标系转换,欧拉角,四元数)
向量: Unity中Vector3 既能表示坐标点又能表示向量. 向量的概念:有大小有方向的箭头叫向量,没有位置. 坐标点的相减得到一个向量,由减数指向被减数的. A到B的方向=B(被减数)-A(减数 ...
- html二维坐标系转换,旋转坐标系 转换工具
旋转坐标系转换工具 假设3D 点的坐标 P, 在已知 x-y-z坐标参考框架: (x,y,z). 1)我们现在想知道在 P 的坐标 x'-y'-z'坐标参考框架, 这是旋转θ 周围的弧度z/z' '轴 ...
- 激光雷达标定(坐标系转换)
文章目录 1. 旋转矩阵 2. 平移矩阵 3. 坐标系的转换 4. 坐标转换代码 1. 旋转矩阵 由于激光雷达获取的点云数据的坐标是相对于激光雷达坐标系的,为了使车最终得到的点云数据坐标是在车坐标系下 ...
- 空间坐标系以及空间两三维坐标系转换矩阵解释
空间坐标系以及空间两三维坐标系转换矩阵解释 因为工作的原因,需要进行不同坐标系的一个转换,在查阅了众多的网页之后,发现有用的没几个,而且众多都是抄的同一篇文章,而且都是罗列以下旋转的方式,几乎没有解释 ...
- android手机传感器坐标系,一种将手机内置传感器采集数据从手机坐标系转换到参考坐标系的处理方法与流程...
本发明提出了一种将手机内置传感器采集的三轴加速度数据从手机坐标系转换到大地参考坐标系的处理方法,该方法涉及到移动通信.模式识别和情景感知等领域. 背景技术: 目前基于智能手机的行为识别是环境智能中的一 ...
- 高德,百度,Google地图定位偏移以及坐标系转换
本文引用地址 一.地图坐标系解释 在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Go ...
- GPS坐标系转换(标准坐标系WGS84转GCJ-02火星坐标系)
GPS坐标系转换(标准坐标系WGS84转GCJ-02火星坐标系) 坐标系简介 WGS-84 标准坐标系 GCJ-02 - 国测局坐标 BD-09 - 百度坐标系 干货前的说明 WGS84转GCJ-02 ...
- 地图定位偏移以及坐标系转换(一)-国内部分常见的地理坐标系
首先明白,所有坐标体系的原点,都是非洲. 在各种web端平台,或高德地图API.腾讯地图API.百度地图API上取到的坐标,都不是GPS坐标,都是GCJ-02坐标,或者自己的偏移坐标系. 比如,在谷歌 ...
最新文章
- 1小时上手MaskRCNN·Keras开源实战 | 深度应用
- MongoDB应用场景
- 【玩转server 2019系列】Windows server 2019打开windows defender提示“需要新应用打开windows defender”的解决方法
- 地球椭球体(Ellipsoid)、大地基准面(Datum)及地图投影(Projection)三者的基本概念
- 收藏!40 个 CSS 布局技巧
- 面试:整理面试中常被问到的8种数据结构
- CF1034E Little C Loves 3 III(神仙构造+FWT_OR卷积)
- iphone查看删除的短信_iPhone12发布!刚买的苹果手机短信全部消失了怎么办?
- fastDFS页面浏览器缓存解决
- 图论 —— 图的连通性 —— Tarjan 求强连通分量
- 射频功率放大器电路设计
- imx6ul的sd卡启动过程分析
- 我的HTML学习(二)----html的基本分类与字符集的学习
- 全文检索引擎ElasticSearch:文档管理、集成IK分词器
- 全局壁纸美化v3.0安卓版
- java实现关键字查询_SpringData关键字查询实现方法详解
- mysql查询姓张的同学_Mysql 基础2 (sql查询语句)
- android开发中为MultiAutoCompleteTextView控件添加其他分隔符
- 哈尔滨工业大学21年计算机考研情况 学硕复录比超2:1?复试竞争激烈!
- JSP中的taglib