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

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

相关文章

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

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

8. 自然语言处理中的深度学习:从词向量到BERT

引言 深度学习在自然语言处理(NLP)领域的应用极大地推动了语言理解和生成技术的发展。通过从词向量到预训练模型(如BERT)的演进,NLP技术在机器翻译、情感分析、问答系统等任务中取得了显著成果。本篇博文将探讨深度学习在NLP中的核心技术,包括词向量、序列模型(如RNN、LSTM),以及BERT等预训练模型的崛起及其实际应用。 1. 词向量的生成与应用 词向量(Word Embedding)

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

二维旋转公式

二维旋转公式 ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。 1. 二维旋转公式(算法) 而(此文只针对二维)旋转则是表示某一坐标点 ( x