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

2023-12-10 23:30

本文主要是介绍四元数,欧拉角,旋转矩阵,旋转向量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

一、欧拉角

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.chinasem.cn/article/478695

相关文章

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk