如何将四元数方向转化为旋转举证_是否有将四元数旋转转换为欧拉角旋转的算法?...

frodo2975..

7

我一直在寻找类似解决方案的几天,我终于遇到了这个网站,它有一个将四元数转换为任意Euler和Tait-Bryan旋转的算法!

这是代码:

///

// Quaternion to Euler

///

enum RotSeq{zyx, zyz, zxy, zxz, yxz, yxy, yzx, yzy, xyz, xyx, xzy,xzx};

void twoaxisrot(double r11, double r12, double r21, double r31, double r32, double res[]){

res[0] = atan2( r11, r12 );

res[1] = acos ( r21 );

res[2] = atan2( r31, r32 );

}

void threeaxisrot(double r11, double r12, double r21, double r31, double r32, double res[]){

res[0] = atan2( r31, r32 );

res[1] = asin ( r21 );

res[2] = atan2( r11, r12 );

}

void quaternion2Euler(const Quaternion& q, double res[], RotSeq rotSeq)

{

switch(rotSeq){

case zyx:

threeaxisrot( 2*(q.x*q.y + q.w*q.z),

q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z,

-2*(q.x*q.z - q.w*q.y),

2*(q.y*q.z + q.w*q.x),

q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z,

res);

break;

case zyz:

twoaxisrot( 2*(q.y*q.z - q.w*q.x),

2*(q.x*q.z + q.w*q.y),

q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z,

2*(q.y*q.z + q.w*q.x),

-2*(q.x*q.z - q.w*q.y),

res);

break;

case zxy:

threeaxisrot( -2*(q.x*q.y - q.w*q.z),

q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z,

2*(q.y*q.z + q.w*q.x),

-2*(q.x*q.z - q.w*q.y),

q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z,

res);

break;

case zxz:

twoaxisrot( 2*(q.x*q.z + q.w*q.y),

-2*(q.y*q.z - q.w*q.x),

q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z,

2*(q.x*q.z - q.w*q.y),

2*(q.y*q.z + q.w*q.x),

res);

break;

case yxz:

threeaxisrot( 2*(q.x*q.z + q.w*q.y),

q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z,

-2*(q.y*q.z - q.w*q.x),

2*(q.x*q.y + q.w*q.z),

q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z,

res);

break;

case yxy:

twoaxisrot( 2*(q.x*q.y - q.w*q.z),

2*(q.y*q.z + q.w*q.x),

q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z,

2*(q.x*q.y + q.w*q.z),

-2*(q.y*q.z - q.w*q.x),

res);

break;

case yzx:

threeaxisrot( -2*(q.x*q.z - q.w*q.y),

q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z,

2*(q.x*q.y + q.w*q.z),

-2*(q.y*q.z - q.w*q.x),

q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z,

res);

break;

case yzy:

twoaxisrot( 2*(q.y*q.z + q.w*q.x),

-2*(q.x*q.y - q.w*q.z),

q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z,

2*(q.y*q.z - q.w*q.x),

2*(q.x*q.y + q.w*q.z),

res);

break;

case xyz:

threeaxisrot( -2*(q.y*q.z - q.w*q.x),

q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z,

2*(q.x*q.z + q.w*q.y),

-2*(q.x*q.y - q.w*q.z),

q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z,

res);

break;

case xyx:

twoaxisrot( 2*(q.x*q.y + q.w*q.z),

-2*(q.x*q.z - q.w*q.y),

q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z,

2*(q.x*q.y - q.w*q.z),

2*(q.x*q.z + q.w*q.y),

res);

break;

case xzy:

threeaxisrot( 2*(q.y*q.z + q.w*q.x),

q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z,

-2*(q.x*q.y - q.w*q.z),

2*(q.x*q.z + q.w*q.y),

q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z,

res);

break;

case xzx:

twoaxisrot( 2*(q.x*q.z - q.w*q.y),

2*(q.x*q.y + q.w*q.z),

q.w*q.w + q.x*q.x - q.y*q.y - q.z*q.z,

2*(q.x*q.z + q.w*q.y),

-2*(q.x*q.y - q.w*q.z),

res);

break;

default:

std::cout << "Unknown rotation sequence" << std::endl;

break;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Spring Boot和DJL进行深度学习

总览 这是Spring Boot上的另一篇文章 &#xff0c;该文章将展示如何使用Deep Java Library &#xff08;DJL&#xff09;构建示例Web应用程序&#xff0c; Deep Java Library &#xff08;DJL&#xff09;是Java的开源深度学习库&#xff0c;用于诊断X射线图像上的COVID-19。 …

ad域管理与维护_U-Mail邮件系统LDAP/AD同步极大提升办公效率

每一位办公族&#xff0c;可能都遇到过这样的问题&#xff1a;1、随着信息化高速发展和企业“互联网”的深入&#xff0c;越来越多的办公平台和软件被开发出来&#xff0c;正如移动互联网端APP应用层出不穷一样&#xff0c;给人们带来了极大地便利性。2、凡事有利有弊&#xff…

r java_如何在R中使用JAVA写的程序包?

不过我对 Java 真的不太熟悉&#xff0c;按照教程调用这个 LLDA 包之后只会使用 inferencer。如果你不嫌麻烦可以考虑先用 Java 计算出结果&#xff0c;然后在 R 中载入这些结果.具体步骤如下&#xff1a;0 - 文件夹 JGibbLDA-v.1.0 放在 R 的工作目录下。1 - 用 JDK 和他提供的…

c语言c99标准_C语言的灵魂指针,配合这个新增的关键字,能够生成更高效的程序...

正如我前面的文章提到的&#xff0c;C语言虽然已经比较成熟&#xff0c;但是近些年来也是有所发展的——比如增加了许多新特性。遗憾的是&#xff0c;可能因为C语言程序员的工资比不过互联网程序员&#xff0c;国内很多教材比较老旧&#xff0c;几乎不涉及近些年来C语言新增的新…

java ee的小程序_Java EE 8 –为更多设备提供更多应用程序

java ee的小程序如果我不喜欢夏天的一件事&#xff0c;那就是事实是没有太多要分享或谈论的新闻。 谁决定将Java Day Tokyo置于今年的这个无聊的时间里&#xff0c;做得很好&#xff0c;并给了我一个写关于新的和即将到来的Java EE 8规范的博客帖子的机会&#xff0c;其中丰富了…

java随机姓名_Java生成随机姓名、性别和年龄的实现示例

一、定义实体类Person&#xff0c;封装生成的数据package net.dc.test;public class Person {private String name;private String sex;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public String getSex() {r…

matlab 图像 幅度谱 低通滤波_数字图像处理期末复习2018-12-21

数字图像处理期末复习2018-12-21愉快先生0.204字数 5547 阅读 18342018-12-22 19:35(数字图像冈萨雷斯第二版教材)一、基本原理图像的读取、存储操作&#xff1a;i imread(filename) ; imwrite(i,’image.jpg’); 图像显示的⽅法及区别&#xff1a;imshow(i); imshow(i,[]);%0…

带有HttpClient的自定义HTTP标头

在Apache HTTPClient请求中设置自定义HTTP标头的快速指南。 在HttpRequest上&#xff0c;调用setHeader&#xff08;&#xff09;方法以将HttpHeaders内容类型设置为JSON。 适用于各种版本的HttpClient&#xff08;4.3之前和之后&#xff09;。 1.简介 在本教程中&#xff0c;…

java 递归深度优先遍历_Java基础 - 二叉树的遍历之深度优先遍历(递归遍历)

package com.yc.test;import java.util.ArrayList;import java.util.List;import com.yc.tree.ThreeLinkBinTree;import com.yc.tree.ThreeLinkBinTree.Node;/**** author wb**遍历二叉树指的是按某种规律依次访问二叉树的每个节点&#xff0c;对二叉树的遍历过程就是将非线性结…

大话oraclerac集群、高可用性、备份与恢复_Oracle RAC结构

Oracle RAC结构Oracle真正集群的出现是在Oracle公司收购Rdb并吸收了相关技术优势后&#xff0c;才正在推出了属于自己的RAC集群解决方案。RAC​和集群分类章节提到的集群系统有很多相似之处&#xff0c;从下图我们大概了解一下RAC集群的层次结构和所需的软硬件环境。Oracle Rac…

java obix_obix协议在java中的配置和使用详解

前言本文主要给大家介绍的是关于obix协议在java中的配置和使用&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧。什么是 oBIX?简单来讲&#xff0c;obix是一种 XML 通讯协议&#xff0c;使用Http Request/Post方式进行数据通…

java7和java8切换_仍不切换到Java 8的6个理由

java7和java8切换Java 8很棒。 期。 但是……在我们有机会玩耍并玩弄它之后&#xff0c;就该退出了&#xff0c;避免吃盐。 所有的好东西都是有代价的&#xff0c;在这篇文章中&#xff0c;我将分享Java 8的主要痛点。请确保在升级和释放7之前您已经意识到了这些痛点。 1.并行…

python求阶乘之和_python计算阶乘前n项和

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 知道公式后就很简单了&#xff0c;利用for循环&#xff0c;第几行i1就等于几&#xff0c;当然python中是没有…

您需要了解的有关UI测试的所有信息

让我们从一个问题开始。 用户在网站上进行互动的第一件事是什么&#xff1f; 接口&#xff0c;当然。 网站的外观是在用户身上产生“第一印象”的第一件事。 交互式Web应用程序可以为用户带来成败&#xff0c;这就是为什么越来越多的人选择对其Web应用程序进行UI测试的原因。 …

python docx库使用样例_Python docx库用法示例分析

本文实例分析了Python docx库用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 打开及保存文件&#xff1a; from docx import Document document Document(test.docx) document.save(test.docx) 添加文本&#xff1a; document.add_paragraph(test text) 调整文本…

使用java理解程序逻辑试卷_《使用Java理解程序逻辑》试题分析

1、在Java中&#xff0c;一下方法属于String类的有()A&#xff1a;insert(int offset,char [] c);B&#xff1a;replace(int start,int end String str);C&#xff1a;split(String regex);D&#xff1a;endsWith(String suffix);正确答案&#xff1a;C、D解析&#xff1a;A&am…

python合并word单元格_python之DataFrame实现excel合并单元格_python

这篇文章主要为大家详细介绍了python之DataFrame实现excel合并单元格&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 在工作中经常遇到需要将数据输出到excel&#xff0c;且需要对其中一些单元格进行合并&#xff0c;比如如下表表格&#xff0c;需要…

java做服务器端给客户端传数据包_java 服务器怎样给客户端传输数据

展开全部服务器端源码&#xff1a;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Se…

pooled-jms_Hibernate隐藏的宝石:pooled-lo优化器

pooled-jms介绍 在这篇文章中&#xff0c;我们将揭示一个序列标识符生成器&#xff0c;​​它结合了标识符分配效率和与其他外部系统的互操作性&#xff08;同时访问底层数据库系统&#xff09;。 传统上&#xff0c;有两种序列标识符策略可供选择。 序列标识符&#xff0c;对…

apache geode项目结构_Apache Flink-基于Java项目模板创建Flink应用(流计算和批计算)...

Apache Flink创建模板项目有2种方式&#xff1a;1. 通过Maven archetype命令创建&#xff1b;2. 通过Flink 提供的Quickstart shell脚本创建&#xff1b;关于Apache Flink的环境搭建&#xff0c;请参考相关链接&#xff1a;Apache Flink快速入门-基本架构、核心概念和运行流程A…