3D中的方位和角位移(8)
从欧拉角转换到四元数
为了将角位移从欧拉角转换到四元数,可以使用从欧拉角构造矩阵类似的方法。先将这三个旋转分别转换为四元数,这是一个简单的运算。再将这三个四元数连接成一个四元数。和矩阵一样,有两种情况需要考虑,第一种是惯性 -- 物体四元数,第二种是物体-- 惯性四元数。因为它们互为共轭关系,所以我们只推导惯性--物体四元数。
设欧拉角为变量h、p、b,设h、p、b分别绕轴y、x、z旋转的四元数。记住,使用负旋转量,因为它们指定坐标系中的旋转角度。
用正确的顺序连接它们得到公式10.24:
(记住,四元数乘法定义是按旋转的顺序从左向右乘。)
物体--惯性四元数是惯性--物体四元数的共轭,见公式10.25:
从四元数转换到欧拉角
根据前面的公式发现:
现在可以将它直接转换到代码中,如程序清单10.5所示,它能把惯性--物体四元数转换成欧拉角。
// Use global variables for input and output
float w,x,y,z;
float h,p,b;
// Extract sin(pitch)
float sp = –2.0f * (y*z + w*x);
// Check for Gimbal lock, giving slight tolerance for numerical imprecision
if (fabs(sp) > 0.9999f) {
// Looking straight up or down
p = 1.570796f * sp; // pi/2
// Compute heading, slam bank to zero
h = atan2(–x*z – w*y, 0.5f – y*y – z*z);
b = 0.0f;
} else {
// Compute angles
p = asin(sp);
h = atan2(x*z – w*y, 0.5f – x*x – y*y);
b = atan2(x*y – w*z, 0.5f – x*x – z*z);
}
将物体--惯性四元数转换到欧拉角,所用的代码和上面非常类似。只是将x、y、z值变负,因为物体--惯性四元数是惯性--物体四元数的共轭。
// Extract sin(pitch)
float sp = –2.0f * (y*z – w*x);
// Check for Gimbal lock, giving slight tolerance for numerical imprecision
if (fabs(sp) > 0.9999f) {
// Looking straight up or down
p = 1.570796f * sp; // pi/2
// Compute heading, slam bank to zero
h = atan2(–x*z + w*y, 0.5f – y*y – z*z);
b = 0.0f;
} else {
// Compute angles
p = asin(sp);
h = atan2(x*z + w*y, 0.5f – x*x – y*y);
b = atan2(x*y + w*z, 0.5f – x*x – z*z);
}
3D中的方位和角位移(8)相关推荐
- 3D 中的方位与角位移(旋转矩阵、欧拉角、四元数)
文章目录 一.3D 中的方位与角位移 1. 欧拉角 (Euler angles) 2. 四元数的相关知识 2.1 复数 2.2 欧拉旋转定理 2.3 三维空间旋转的拆分 3. 四元数 (Quatern ...
- 3D中的方位与角位移
摘要:本文讲述了3D中描述方位与角位移的方法:矩阵.欧拉角和四元数,以及它们优缺点和适用场景.给理解Gimbal Lock提供了一种新视角. 1. 简介 "方位"是指物体的朝向,是 ...
- 3D数学读书笔记——3D中的方位与角位移
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25339595 方位和角位移 ...
- 3D中的方位和角位移(2)
另一种描述方位的常用方法是欧拉角,这项技术以著名的数学家Leonhard Euler(1707 - 1783)的名字命名,他证明了角位移序列等价于单个角位移. 什么是欧拉角 欧拉角的基本思想是将角位移 ...
- 3D中的方位和角位移(1)
什么是方位 直观地说,我们知道物体的"方位"主要描述的是物体的朝向.然而"方向"和"方位"并不完全一样.向量有"方向"但 ...
- 3D中的方位和角位移(7)
从四元数转换到矩阵 为了将角位移从四元数转换到矩阵形式,可以利用旋转矩阵,它能计算绕任意轴的旋转: 这个矩阵是用n和θ表示的,但四元数的分量是: w = cos(θ/2) x = nx sin(θ/2 ...
- 3D数学之方位与角位移、欧拉角与四元数
3D物体如何描述方位: 1.方向 2.角位移 3.旋转 方位≠方向 当向量自转时,不会改变向量的属性 但是物体自转时,物体的方位就变化了 表示方法: 位置:使用相对于参考系的位移 方位:相对于已知方位 ...
- WPF 3D中多个模型如何设置某一个在最前?
原文:WPF 3D中多个模型如何设置某一个在最前? 问题:我们的模型包括导入的3D solid模型和axis坐标轴模型,当模型旋转的时候,3D会将axis挡住. 期望:axis一直在最前面,不会被3D ...
- Map 3D中程序设置地图中心点
你可能需要在Map 3D中通过程序把某块地图拉到屏幕中央来,下面通过程序的方式来实现这个功能. 这里有两种情况,如果你在Map 3D中通过Data Connect连接到了一下FDO数据源(SDF.SH ...
最新文章
- python连接数据库,处理数据结果后生成excel文件
- 字符串常量是一个字符数组
- 巧妙算法:找出数组中消息的数字
- 如何保证Linux服务器的安全
- 【Post工具】PostMan 他媳妇 PostWoman
- Java线程池ThreadPoolExecutor源码分析
- Android EditText 常用属性总结
- jquery操作html小技巧
- 【图像隐写】基于matlab GUI变换域的可逆数字水印系统设计【含Matlab源码 1813期】
- mscomm32.ocx 注册 和 web 调用案例
- excel如何快速将英文表格翻译为中文表格
- Tomcat中temp文件夹出现项目副本问题的解决方法
- Vue项目打包部署到七牛CDN
- Guava ImmutableSet源码去重处理,Hash处理
- mysql的check出错_如何利用myisamchk和mysqlcheck快速修复损坏的MySQL数据库
- 适用于计量站电子测量仪器自动检定系统设计
- zCloud丨自动、智能、高效的数据库云管理平台
- 【开发经验】客户端互踢实现思路
- 2019年高教社杯全国大学生数学建模竞赛题目 E题 “薄利多销”分析
- 什么是放大器和宽带放大器及其性能概述
热门文章
- pcm格式封装wav
- python人脸识别对比_python 人脸对比--百度API人脸相似度识别(超简单)
- 浏览器内核及其兼容的简单说明
- postman问题及汉化
- java毕业设计 基于vue的小区停车场停车位短租管理系统ssm源码介绍
- 错误判断服务器系统,服务器系统日志报错科普
- Function和function
- 给超链接加个手指的图标
- TeamFlowy——结合Teambition与Workflowy提高生产力
- VMware Workstation 不可恢复错误: (vcpu-0) vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123