四元数,欧拉角,旋转矩阵,旋转向量

四元数,旋转矩阵,旋转向量,欧拉角

一、欧拉角

1、欧拉角是表达旋转的最简单的一种方式,形式上它是一个三维向量,其值分别代表物体绕坐标系三个轴(x,y,z轴)的旋转角度,默认旋转正向为逆坐标轴逆时针方向。

2、在旋转过程中,xyz轴方向并不是固定不变的,而是随着前面的旋转而改变。比如如果绕 x 轴旋转 90 度,那么旋转后的 y 轴正向将指向原始的 z 轴方向,而旋转后的 z 轴正向将指向 y 轴负向。由此可以看出,欧拉角对应的具体旋转与 xyz 轴的旋转顺序是有关的,相同的 xyz 旋转角度,如果按 xyz 的顺序进行旋转使用按 zyx 的顺序进行旋转,得到的结果是不一致的。

3、在具体应用中,xyz 轴朝向不固定,需要具体情况具体分析。

  1. pitch:绕 x 轴旋转,
  2. yaw:绕 y 轴旋转,
  3. roll:绕 z 轴旋转,

4、欧拉角表示最大的问题是存在万向锁问题。万向锁(Gimbal lock)是在使用动态欧拉角表示三维物体的旋转时出现的问题。一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。

二、四元数

四元数通过四个实数描述三维旋转,q=w+ix+jy+kz,其中 w^2+x^2+y^2+z^2=1

三、旋转向量

旋转向量用一个三维向量来表示三维旋转变换,该向量的方向是旋转轴,其模则是旋转角度。

转换方法

一、scipy.spatial.transform.Rotation

官方文档:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.transform.Rotation.html#scipy.spatial.transform.Rotation

from scipy.spatial.transform import Rotation as R# 从四元数加载
r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])# 从旋转矩阵加载
r = R.from_matrix([[0, -1, 0],[1, 0, 0],[0, 0, 1]])# 从旋转向量加载
r = R.from_rotvec(np.pi/2 * np.array([0, 0, 1]))# 从欧拉角加载
r = R.from_euler('zyx', [
[90, 0, 0],
[0, 45, 0],
[45, 60, 30]], degrees=True)# 使用四元数表示
r.as_quat()# 使用旋转矩阵表示
r.as_matrix()# 使用旋转向量表示
r.as_rotvec()# 使用欧拉角表示
r.as_euler('zyx', degrees=True)# 取逆
inv_r = r.inv()# 对点进行旋转
r.apply(v)

二、pyquaternion.Quaternion

官方文档:https://kieranwynn.github.io/pyquaternion/

r = Quaternion([w, x, y, z]).rotation_matrix

旋转矩阵和平移向量的特殊操作

如果给定 A2B 的旋转矩阵和平移向量,但是需要 B2A 的旋转矩阵和平移向量,可以如此操作:

R_B2A = np.linalg.inv(R_A2B)
T_B2A = -np.dot(R_A2B, T_A2B)

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

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

相关文章

C#winform上下班打卡系统Demo

C# winform上下班打卡系统Demo 系统效果如图所示 7个label控件(lblUsername、lblLoggedInEmployeeId、lab_IP、lblCheckOutTime、lblCheckInTime、lab_starttime、lab_endtime)、3个按钮、1个dataGridView控件、2个groupBox控件 C#代码实现 using System; using System.Dat…

Java零基础——Elasticsearch篇

1.Elasticsearch简介 Elasticsearch是一个基于Lucene的一个开源的分布式、RESTful 风格的搜索和数据分析引擎。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中&#xf…

【Ambari】Python调用Rest API 获取YARN HA状态信息并发送钉钉告警

🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…

二层交换原理

二层交换设备工作在OSI模型的第二层,即数据链路层,它对数据包的转发是建立在MAC(Media Access Control )地址基础之上的。二层交换设备不同的接口发送和接收数据独立,各接口属于不同的冲突域,因此有效地隔离…

【C/PTA —— 15.结构体2(课内实践)】

C/PTA —— 15.结构体2&#xff08;课内实践&#xff09; 7-1 计算职工工资7-2 计算平均成绩7-3 找出总分最高的学生7-4 通讯录的录入与显示 7-1 计算职工工资 #include<stdio.h> #include<stdlib.h> typedef struct GZ {char name[6];double j;double f;double z;…

记一次由 jedis 引发的离谱选学问题

背景 我的应用中&#xff0c;使用 jedis 作为连接 redis 的客户端&#xff0c;一直在用的好好的&#xff0c;后来有一个新的组件&#xff0c;也需要使用 redis&#xff0c;但是组件是内部封装的&#xff0c;我只能提供一个 StringReidsTempalte&#xff0c;所以我基于应用本身…

【无线网络技术】——无线广域网(学习笔记)

&#x1f4d6; 前言&#xff1a;无线广域网(WWAN)是指覆盖全国或全球范围内的无线网络&#xff0c;提供更大范围内的无线接入&#xff0c;与无线个域网、无线局域网和无线城域网相比&#xff0c;它更加强调的是快速移动性。典型的无线广域网&#xff1a;蜂窝移动通信系统和卫星…

Java期末复习题之抽象类、接口

点击返回标题->23年Java期末复习-CSDN博客 第1题. 首先设计一个学生抽象类Student&#xff0c;其数据成员有name(姓名)、age(年龄)和degree(学位)&#xff0c;以及一个抽象方法show()。然后由Student类派生出本科生类Undergraduate和研究生类Graduate&#xff0c;本科生类Un…

第 7 部分 — 增强 LLM 安全性的策略:数学和伦理框架

一、说明 增强大型语言模型 (LLM) 安全性的追求是技术创新、道德考虑和实际应用的复杂相互作用。这项努力需要一种深入而富有洞察力的方法&#xff0c;将先进的数学模型与道德原则和谐地融合在一起&#xff0c;以确保LLM的发展不仅在技术上稳健&#xff0c;而且在道德上合理且对…

网络攻击(一)--安全渗透简介

1. 安全渗透概述 目标 了解渗透测试的基本概念了解渗透测试从业人员的注意事项 1.1. 写在前面的话 在了解渗透测试之前&#xff0c;我们先看看&#xff0c;信息安全相关的法律是怎么样的 中华人民共和国网络安全法 《中华人民共和国网络安全法》由全国人民代表大会常务委员会…

Spring Cloud切换内嵌Tomcat为宝兰德Application Server

目录 替换Tomcat中间件Tomcat是什么Spring Cloud剔除tomcat引入宝兰德Application Server打包运行授权导入 替换Tomcat中间件 Tomcat是什么 Spring Cloud剔除tomcat <!--集成springmvc框架 --><dependency><groupId>org.springframework.boot</groupId&…

Java安全之Commons Collections6分析

CC6分析 import org.apache.commons.collections.*; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; impo…

上网监控软件——安全与隐私的平衡

网络已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;随着网络使用的普及&#xff0c;网络安全问题也日益突出。上网监控软件作为网络安全领域的一个重要组成部分&#xff0c;在保护企业和家庭网络安全方面发挥着重要作用。 本文将探讨上网监控软件的背景、功能、优…

1-2算法基础-常用库函数

1.排序 sort(first,last,cmp) first指向要排序范围的第一个元素&#xff0c;从0起 last指向要排序范围的最后一个元素的下一个位置 cmp&#xff08;可选&#xff09;&#xff0c;自定义函数&#xff0c;默认从小到大 评测系统 #include <iostream> #include<algorith…

Java一对一聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector;…

three.js 入门三:buffergeometry贴图属性(position、index和uvs)

环境&#xff1a; three.js 0.159.0 一、基础知识 geometry&#xff1a;决定物体的几何形状、轮廓&#xff1b;material&#xff1a;决定物体呈现的色彩、光影特性、贴图皮肤&#xff1b;mesh&#xff1a;场景中的物体&#xff0c;由geometry和materia组成&#xff1b;textu…

十五、机器学习进阶知识:K-Means聚类算法

文章目录 1、聚类概述2、K-Means聚类算法原理3、K-Means聚类实现3.1 基于SKlearn实现K-Means聚类3.2 自编写方式实现K-Means聚类 4、算法不足与解决思路4.1 存在的问题4.2 常见K值确定方法4.3 算法评估优化思路 1、聚类概述 聚类&#xff08;Clustering&#xff09;是指将不同…

浅谈WPF之控件拖拽与拖动

使用过office的visio软件画图的小伙伴都知道&#xff0c;画图软件分为两部分&#xff0c;左侧图形库&#xff0c;存放各种图标&#xff0c;右侧是一个画布&#xff0c;将左侧图形库的图标控件拖拽到右侧画布&#xff0c;就会生成一个新的控件&#xff0c;并且可以自由拖动。那如…

1 接口测试介绍

在软件测试工作中&#xff0c;接口测试是必不可少的。接口测试一般是发生在单元测试之后&#xff0c;系统测试之前。当开发人员输出API文档后&#xff0c;测试人员就可以开始编写接口测试用例了。接口测试可以让测试人员更早的介入&#xff0c;不需要等待前后端联调完成才开始测…

银行卡二要素API的应用案例:从在线购物到金融投资

引言 随着互联网技术的不断发展&#xff0c;人们的金融需求也在不断增加。随之而来的是各种新型金融服务的涌现&#xff0c;让用户的金融体验更加便利快捷。其中&#xff0c;银行卡二要素API的应用&#xff0c;则为用户的金融体验和安全性提供了极大的保障。 银行卡二要素API…