四元数入门

四元数的理解(简单入门应用) 本人做的一个项目(配准)需要用单位四元数来求解相关参数,利用的是四元数在旋转上的优势。 下面整合归纳一下对四元数的理解,及其在旋转上的应用。 1.基本定义: 首先明确,四元数是超复数。 复数是什么呢? 复数是由实数加上虚数单位 i 组成,其中i^2 = -1。 四元数都是由实数加上三个虚数单位 i、j、k 组成,而且它们有如下的关系: i^2 = j^2 = k^2 = -1, i^0 = j^0 = k^0 = 1 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bi+ 阅读详情

4元数宝典

这是国内找不到的超好文章。(为什么大陆的4元数文章很垃圾呢?)
(翻译中。。。奉献给大家~~)

70秒即懂,能使用,用四元数,4元数,阔特尼恩,Quaternion旋转
(C) 中田  亨  (独立行政法人  产业技术综合研究所  数字人类研究中心  研究员 博士(工学)) 
2003年11月25日

★这个页面的对象读者
想把三次元的旋转,用CG等定量地处理的人
使用欧拉角(Euler Angles)的话,不懂得其道理的人 
卡尔丹角和欧拉角(Cardan Angles)不能区别的人 
对吉恩瓦尔洛克很困惑的人
但是,对数学之类麻烦的事情很讨厌的人
想要实例程序的人 
没有时间的人

★旋转篇:
 我将说明使用了四元数(si yuan shu, quaternion)的旋转的操作步骤
(1)四元数的虚部,实部和写法
所谓四元数,就是把4个实数组合起来的东西。
4个元素中,一个是实部,其余3个是虚部。
比如,叫做Q的四元数,实部t而虚部是x,y,z构成,则像下面这样写。
Q = (t; x, y, z) 
又,使用向量 V=(x,y,z),
Q = (t; V)  
也可以这么写。

正规地用虚数单位i,j,k的写法的话,
Q = t + xi + yj + zk 
也这样写,不过,我不大使用

(2)四元数之间的乘法
虚数单位之间的乘法 
ii = -1, ij = -ji = k (其他的组合也是循环地以下同文) 
有这么一种规则。(我总觉得,这就像是向量积(外积),对吧) 
用这个规则一点点地计算很麻烦,所以请用像下面这样的公式计算。

A = (a; U) 
B = (b; V) 
AB = (ab - U·V; aV + bU + U×V)
不过,“U·V”是内积,「U×V」是外积的意思。
注意:一般AB<>BA所以乘法的左右要注意!

(3)3次元的坐标的四元数表示
如要将某坐标(x,y,z)用四元数表示,
P = (0; x, y, z) 
则要这么写。
 
另外,即使实部是零以外的值,下文的结果也一样。用零的话省事所以我推荐。

(4)旋转的四元数表示
以原点为旋转中心,旋转的轴是(α, β, γ)
(但 α^2 + β^2 + γ^2 = 1), 
(右手系的坐标定义的话,望向向量(α, β, γ)的前进方向反时针地) 
转θ角的旋转,用四元数表示就是,
Q = (cos(θ/2); α sin(θ/2), β sin(θ/2), γ sin(θ/2)) 
R = (cos(θ/2); -α sin(θ/2), -β sin(θ/2), -γ sin(θ/2)) 
(另外R 叫 Q 的共轭四元数。)

那么,如要实行旋转,
则 R P Q = (0; 答案)

请像这样三明治式地计算。这个值的虚部就是旋转之后的点的坐标值。
 (另外,实部应该为零。请验算看看)

*未完。。。


instemast_REAL 2007-2-24 19:04:57
 
 注册: 2007-2    状态: Offline 1   Top 
 
instemast_REAL
Exp:124

侦察兵
  发表于: 2007-2-24 19:06:00 档案 | 短信 | 树状 | 收藏 | 编辑 | 删除 | 引用   
 

--------------------------------------------------------------------------------
Re:4元数宝典

/// Quaternion.cpp 
/// (C) Toru Nakata, toru-nakata@aist.go.jp 
/// 2004 Dec 29 
  
#include <math.h> 
#include <iostream.h> 
  
/// Define Data type 
typedef struct 
{ 
              double t; // real-component 
              double x; // x-component 
              double y; // y-component 
              double z; // z-component 
} quaternion; 
  
  
//// Kakezan 
quaternion Kakezan(quaternion left, quaternion right) 
{ 
              quaternion ans; 
              double d1, d2, d3, d4; 
  
              d1 =  left.t * right.t; 
              d2 = -left.x * right.x; 
              d3 = -left.y * right.y; 
              d4 = -left.z * right.z; 
              ans.t = d1+ d2+ d3+ d4; 
  
              d1 =  left.t * right.x; 
              d2 =  right.t * left.x; 
              d3 =  left.y * right.z; 
              d4 = -left.z * right.y; 
              ans.x =  d1+ d2+ d3+ d4; 
  
              d1 =  left.t * right.y; 
              d2 =  right.t * left.y; 
              d3 =  left.z * right.x; 
              d4 = -left.x * right.z; 
              ans.y =  d1+ d2+ d3+ d4; 
  
              d1 =  left.t * right.z; 
              d2 =  right.t * left.z; 
              d3 =  left.x * right.y; 
              d4 = -left.y * right.x; 
              ans.z =  d1+ d2+ d3+ d4; 
              
              return ans; 
} 
  
//// Make Rotational quaternion 
quaternion MakeRotationalQuaternion(double radian, double AxisX, double AxisY, double AxisZ) 
{ 
              quaternion ans; 
              double norm; 
              double ccc, sss; 
              
              ans.t = ans.x = ans.y = ans.z = 0.0; 
  
              norm = AxisX *  AxisX +  AxisY *  AxisY +  AxisZ *  AxisZ; 
              if(norm <= 0.0) return ans; 
  
              norm = 1.0 / sqrt(norm); 
              AxisX *= norm; 
              AxisY *= norm; 
              AxisZ *= norm; 
  
              ccc = cos(0.5 * radian); 
              sss = sin(0.5 * radian); 
  
              ans.t = ccc; 
              ans.x = sss * AxisX; 
              ans.y = sss * AxisY; 
              ans.z = sss * AxisZ; 
  
              return ans; 
} 
  
//// Put XYZ into  quaternion 
quaternion PutXYZToQuaternion(double PosX, double PosY, double PosZ) 
{ 
              quaternion ans; 
  
              ans.t = 0.0; 
              ans.x = PosX; 
              ans.y = PosY; 
              ans.z = PosZ; 
  
              return ans; 
} 
  
///// main 
int main() 
{ 
              double px, py, pz; 
              double ax, ay, az, th; 
              quaternion ppp, qqq, rrr; 
  
              cout << "Point Position (x, y, z) " << endl; 
              cout << "  x = "; 
              cin >> px; 
              cout << "  y = "; 
              cin >> py; 
              cout << "  z = "; 
              cin >> pz; 
              ppp = PutXYZToQuaternion(px, py, pz); 
  
              while(1) { 
                            cout << "/nRotation Degree ? (Enter 0 to Quit) " << endl; 
                            cout << "  angle = "; 
                            cin >> th; 
                            if(th == 0.0) break; 
  
                            cout << "Rotation Axis Direction ? (x, y, z) " << endl; 
                            cout << "  x = "; 
                            cin >> ax; 
                            cout << "  y = "; 
                            cin >> ay; 
                            cout << "  z = "; 
                            cin >> az; 
  
  
                            th *= 3.1415926535897932384626433832795 / 180.0; /// Degree -> radian; 
  
                            qqq = MakeRotationalQuaternion(th, ax, ay, az); 
                            rrr = MakeRotationalQuaternion(-th, ax, ay, az); 
  
                            ppp = Kakezan(rrr, ppp); 
                            ppp = Kakezan(ppp, qqq); 
  
                            cout << "/nAnser X = " << ppp.x 
                                          <<  "/n      Y = " << ppp.y 
                                          <<  "/n      Z = " << ppp.z << endl; 
  
              } 
  
              return 0; 
} 

*未完。。。


 
 

四元数的长处和缺点

冰川球的吉恩瓦尔。

吸收前后左右的倾斜而保持水平

长处

“直观的”

如果给出旋转轴和旋转角度的话,就算不考虑欧拉角之类的,也可以立即计算。

“连续性”

表示相似的旋转的四元数的值也相似。没有吉恩瓦尔洛克现象。
(所谓吉恩瓦尔洛克就是,“北极和南极等特殊点,在自转的情况下是不能动的。”“在中国餐馆的圆桌上,
放在正中央的酱油怎么转也转不近”等,有效的自由度和次元丧失的现象。在软件中成为例外处理的困难因而是麻烦事。本来吉恩瓦尔是把罗盘针吊起来的机构。为了使得即便船摇晃罗盘针也保持水平而不摇晃。吉恩瓦尔的柄把罗盘针晃晃荡荡地吊着,但若使得这些东西的方向一致了,就不能晃了(=洛克lock),振动传到罗盘针了。)

“记忆效率好,计算快”

旋转能够只用4个数值记述。与阿弗因变换矩阵等相比,不用记忆。减少不必要的计算。
 
缺点

“从外观上看不知道表示什么意思”
 
从四元数的成分来看,其表示什么意思,一眼看不出来。
 
“不能表示多圈旋转”
如你所见,使用cos和sin,所以θ是10度,370度,还是-350度,不能区别。
想要制作咕噜咕噜转许多圈的动画的情况下,不想只旋转一遍,请仔细区分。


“是以原点为中心的旋转”
想以原点以外为中心的情况,请让坐标穿上木屐,旋转,然后还原木屐。
(下文的一般位移篇也check一下吧!)

四元数旋转的软件的源代码
<<source code 贴过了>>

一般位移篇:作为旋转以外的变形的扩大缩小(与并进)的步骤

考虑四元数的标量倍,就可以将旋转篇的结果坐标给扩大缩小。比如,
P = (0; x, y, z)

(另外实部可以为任意值。0好算)

kQ = (kcos(θ/2); kα sin(θ/2), kβ sin(θ/2), kγ sin(θ/2))

kR = (kcos(θ/2); -kα sin(θ/2), -kβ sin(θ/2), -kγ sin(θ/2))
  
(KR是KQ的共轭四元数。)

则有,

kR P kQ = ( 0; 旋转后的XYZ坐标的k的自乘倍)

这样,就可以将以原点为中心的旋转,和以原点为中心的扩大缩小一起操作了。
这表示,可以自由地操作以原点为准的方位及其距离。就是说,将一点(X,Y,Z)映射到任意的点(X',Y',Z')的变换,可以用四元数表示。但X=Y=Z=0的情况例外。

制作你所希望的四元数篇:实施某旋转的四元数的作法

表示将一点A,移到别的点B的以原点为中心的旋转的四元数,像这样制作。

旋转轴(α,β,γ)和位置向量的外积 B×A 平行且同向。(A和B的顺序,按四元数R和Q的乘法的顺序交替。本文的乘法顺序的定义的话,就是BA的顺序。)作了除法之后,将把长度改为1。

(α,β,γ)= (B×A) / (|B×A|)

cos(θ)是,将位置向量的内积 B·A 除以|B|·|A|。
cos(θ)= (B·A) / (|B|·|A|)

根据三角函数的半角公式,
cos(θ/2)=±√{ 0.5 * (1 + cosθ) } 
sin(θ/2)=±√{ 0.5 * (1 - cosθ) }

正负号呢,由于 0°≦θ≦180°所以,cos(θ/2)≧0 且 sin(θ/2)≧0 就是说,两边都为正。
cos(θ/2)=√{ 0.5 * (1 + cosθ) } 
sin(θ/2)=√{ 0.5 * (1 - cosθ) }

也要进行扩大缩小的情况、k = √{|B|/|A|}

从欧拉角到四元数的变换及其逆变换的问题(背景说明篇)

这个问题时不时被谈论,由于数学原因和数学之外的事情而很难。
 
3次元的旋转呢,
(1) 作为旋转轴的直线
(2) 旋转角度
有这两个信息,就可以表示。这便是“万能的3次元旋转表示”。

把这样的单次的旋转叫做single rotation。

(注意:single rotation 没有旋转中心点。只有旋转轴。如果是,关于像球形关节这样的旋转的,拥有不同旋转轴的single rotation 复合而成的 rotation sequence ,的话,就能够考虑旋转中心点了。)
(*译注:此句的复句结构复杂,但无论怎么理解都不影响意思!)
 
(注意:四元数将single ratation以旋转轴和旋转角度的信息来直接地表示。
欧拉角呢,是要把一个single rotation,用分解为3个single rotation的方式来表示。可以说故意搞复杂了。而且,蕴含着引起吉恩瓦尔洛克的问题的可能性。)


“欧拉角-->四元数”
考虑像这样的直接的变换是非常难的问题。
正确的是,应该取,
像“欧拉角-->万能表示-->四元数”
这样的,
“一种表式形式-->万能表示-->别的表示形式”
的路径。我想这最安全也易思考。

 


文章主要内容在前面,后面闲谈比较多。而且后面的语法有点乱(科学家语文不好,还喜欢用复杂句式)
但注意,他告诉了我们什么是真正的欧拉角,这有点出乎意料,和一般d3d书上说的不一样。

变换困难的数学原因

四元数:原点不在旋转轴上的情况,必须将其木屐(偏移量)用别的途径表示。
欧拉角:不仅有原点的偏移量的问题,而且,产生吉恩瓦尔洛克现象情况下必须做例外处理。还有,轴的旋转顺序(虽说有惯例但)不统一。(总的来说欧拉角有太多使用上的难点。)

变换困难的数学之外的原因

数据格式因软件而异。“一段变换程序”只在一个公司的软件范围内通用。 
坐标轴的设定不同。右手系还是左手系不统一。还有“向上”和“向右”是哪个轴等问题。也有历史原因,所以不统一。
角度的正负方向的决定方式难以知晓。数据格式与坐标轴设定的技术,光看源代码不知道。
(特别是,拥有三个角度的欧拉角很麻烦)
既如此,为什么要用欧拉角呢?
because there are many gyros whitch are roll,pitch and yaw,in the output?
像大炮的底座一样地,机构使用了roll,pitch,yaw的情况也是有的。
(注:gyro = gyrocompass旋转罗盘,gyroscope陀螺仪)

欧拉角是什么

Euler考虑到,“一个三次元的single rotation,可以以组合三个以坐标轴作为旋转轴的三次元旋转的方式来表示”。这是广义的欧拉角。
就是说,以,从坐标系看来倾斜的轴,为旋转轴的旋转,搞得好的话,首先以Z轴中心旋转α度,然后以X轴中心旋转β度,最后以Z轴中心旋转γ度,以这种方式,是可以作出一模一样的旋转的。(发生吉恩瓦尔洛克现象的情况,失去了解的一义性,成为了件麻烦的事情。)
欧拉自己,把旋转轴的选择方式使用了Z-X-Z。这个选轴顺序的情况,是狭义的欧拉角。(考虑陀螺的运动的时候,首先把陀螺的高速自转用Z轴旋转表示,把陀螺的芯棒倒向地面的旋转用X轴旋转表示把陀螺芯棒的水平旋转用Z轴旋转表示。)

世上像Z-Y-Z、X-Z-X, Y-X-Y之类的模式,似乎也有人称之为欧拉角的。
轴的选择方式,也有,像X-Y-Z,Y-Z-Z这样的3轴顺次使用的模式。(另外,3个轴的立场不是平等的。存在着由旋转操作的先后所引起的不同

。)也有人把这些认作是广义的欧拉角,而,只承认狭义的欧拉角的人是误解之源。

X-Y-Z式是被频繁使用的模式。这被叫做roll,pitch,yaw角式,也有人叫卡尔丹角(Cardan angles)。

从欧拉角到四元数表示

这是极其简单的,把欧拉角的3次旋转,分别用四元数表示,顺次作乘法即可。

从四元数到欧拉角

「オイラー角→四元数」の逆変換を考えることになります。公式化してもいいのですが、オイラー角がZ-X-Z式なのかX-Y-Z式なのかの違い

で、大きく変わってしまいます。シンバルロック発生時には、公式の中でゼロ割りが起きますので、その処理も面倒みてください。
シングルローテーションの不思議
我们来考虑一下“欧拉角-〉四元数”的逆变换。虽说可以公式化但是,因欧拉角是Z-X-Z式还是X-Y-Z式的不同,就会有大的变化。吉恩瓦尔洛

克现象发生的时候,在公式中会发生零作除数的情况,其处理也麻烦请看。
single rotation的不可思议
一个single rotation,可以用一个四元数来表示的。
于是可以说,进行N次single rotation的旋转,能够用N个四元数的积的一个四元数来表示。也就是说,多个single rotation的串珠实行,无

视其过程,只看其结果的话,可以只用1个四元数表示。
结果,就算咕噜咕噜地转,也只不过是进行了1个single rotation。就算把足球转到那边,再转回这边,按照初期姿势和最终姿势,完全没有

移动的点至少有2个!或者说,在1次旋转中,到最终姿势,只是跳个一下就可以了。

四元数:从入门到精通——一个关于旋转的故事 这个问题困扰了我很久。为什么公式里是θ2\theta/2θ/2而不是θ\thetaθ?四元数旋转使用"双侧乘法"。为了旋转一个向量v\mathbf{v}vv′qvq−1v′qvq−1这里v\mathbf{v}v0vxivyjvzk0vx​ivy​jvz​k。因为我们要乘以qqq两次(左乘和右乘),所以每个qqq只需要包含一半的角度。qqq里的θ2\theta/2θ/2乘以 2,得到完整的。 阅读详情

相关推荐

【FPGA】AD9653设计和调试总结

基于FPGA的AD9653设计,设计思路,注意事项

weixin_41246509的博客 7589

4元数(转)

这是国内找不到的超好文章。(为什么大陆的4元数文章很垃圾呢?)(翻译中。。。奉献给大家~~)70秒即懂,能使用,用四元数,4元数,阔特尼恩,Quaternion旋转(C) 中田  亨  (独立行政法人  产业技术综合研究所  数字人类研究中心  研究员 博士(工学)) 2003年11月25日★这个页面的对象读者想把三次元的旋转,用CG等定量地处理的人使用欧拉角(Euler Angles)的

JohnsonYu 1131

银河麒麟V10ServerSP3中安装Nacos2.4.x详细教程

银河麒麟V10ServerSP3中安装Nacos2.4.x详细教程

yuanjinshenglife的专栏 1301

四元数和向量相乘作用及其运算规则

作用:四元数和向量相乘表示这个向量按照这个四元数进行旋转之后得到的新的向量。 比如:向量vector3(0,0,10),绕着Y轴旋转90度,得到新的向量是vector3(10,0,0)。 在unity中表示为: 运行结果为: 复合旋转就是四元数依次相乘,最后乘以向量 运算过程 将四元数的四个值分别计为:(w,x,y,z),unity中的四元数中的四个数字是(x,y,z,w),不影响下面的计算过程。 绕任意轴旋转任意角度的四元数为: 那么绕着Y轴旋转90度的四元数就是q = (√2/2 , 0 , √2/

qq_40851561的博客 7834

【FreeRTOS】FreeRTOS 源码学习笔记 (3)队列 及 xQueueGenericSend分析

引言 本篇又不写调度器了,准备先整理整理“队列“,无他,就觉得这个很有用,自己写应用层代码的时候,队列要用的比较多,之前一直用一个自己写的环形buffer,里面nReadIndex,nWriteIndex,nFreeIndex来管理总觉得不够“官方”,这次看到一个如此成熟的队列,还是忍不住先分析一下。 ...

YoYo的桃子树 5104

Jetson Orin边缘语音AI实战:用Riva ASR/TTS + Llama 2打造离线智能语音助手

本文详细介绍了如何利用NVIDIA Jetson Orin的边缘计算能力,结合Riva ASR/TTS语音引擎和Llama 2大语言模型,构建完全离线的智能语音助手。通过硬件优化、量化部署和性能调优,实现在网络不稳定环境下的高效语音交互,适用于智能家居、车载系统等场景。

weixin_29053383的博客 242

手撕自动驾驶算法——四元素

基本性质 用旋转矩阵来表示旋转很直观,但过于冗余,因为旋转只有三个自由度,而旋转矩阵有九个量。表征旋转还可以用欧拉角,但有万向锁问题,而且计算也不方便。 旋转向量(即李代数 so(3))和四元数是更常用的表征方法,在惯性导航中四元数似乎更普遍些。这里采用四元数。 一个四元数由一个实部和三个虚部构成,虚部在前实部在后: q=q1i+q2j+q3k+q4=[vTq4]T{\bf q} = q_1 i ...

xiaohu的博客 1195

OTFS 消息传递算法信号检测【附matlab代码详解】

OTFS 消息传递算法方面的一些浅浅理解。

Cuby的博客 4010

四元数左乘右乘_四元数的初步总结(二)

三、四元数乘法的性质与几何意义四元数的乘法不满足交换律,比如,\( ij=-ji,jk=-kj,ik=-ki\)。但不是所有的四元数乘积在交换因子之后都变换符号,比如:\( (1+2i+3j+4k)(5+6i+7j+8k)=-60+12i+30j+24j\)而\( (5+6i+7j+8k)(1+2i+3j+4k)=-60+20i+14j+32k\)但是也不是所有的四元数都不遵循交换律,比如,\( ...

weixin_39638464的博客 2976

lammps教程:非晶sio2建模方法

大家好,我是小马老师。 本文介绍非晶sio2的建模方法。 sio2的建模方法有很多,可以下载cif文件使用atomsk转为data文件,也可以直接在ms中导入sio2结构,这些方法建的sio2都是标准的sio2晶体。 如果要建立非晶状态的sio2,就是把排列规则的sio2变成无序排列的sio2。 非晶建模方法有很多,在lammps中,可以通过高温高压的方法打乱sio2的排列实现非晶建模。 代码中的温度和步数可根据需要自己调整。 下面给出in文件案例代码。 units metal atom

lammps_jiayou的博客 5268

从零开始讲DDR(8)——AXI 接口MIG 使用(1)

我们简单拆解了MIG AXI接口中测试文件的整体框架,首先在sim_tb_top.sv文件中例化了DDR模型和example_top。在example_top中,又例化了MIG IP和一个流量产生器ddr4_v2_2_8_axi_tg_top。在ddr4_v2_2_8_axi_tg_top中的主要功能是分别例化了boot_mode_gen,prbs_mode_gen,custom_mode_gen和axi_opcode_gen。

apple_53311083的博客 1587

四元数旋转相乘顺序(eigen和TF)

坐标转换相对比较容易理解,四元数的旋转困扰了我很久,思考如下,如有错误请大佬指正。规定ZYX顺序,对应Yaw,Pitch和Roll。若以局部坐标系旋转,也就是先按照Z轴旋转,再绕当前坐标系Y轴旋转,再绕当前坐标系X轴旋转。四元数和常见的姿态表示均用这种方式。用公式表示若以固定坐标系旋转,也就是先按照Z轴旋转,再绕固定坐标系Y轴旋转,再绕固定坐标系X轴旋转。用公式表示为:如果用四元数连续相乘,我觉得比较好理解的方式是全都考虑成局部坐标系中。Eigen中使用欧拉角、四元数、旋转矩阵和角轴不在这里提及。

llllldm的博客 2450

【2022】人工智能☆✨

1. 朴素⻉叶斯⽅法是⼀种 ( ) ⽅法。A.机器学习的分类B.不确定性推理C.知识表示答案:A解析:朴素贝叶斯分类器是基于贝叶斯定理与特征条件独立假设的分类方法。它通过学习训练数据集来预测未知数据的类别标签,因此属于机器学习中的监督学习分类方法。选项B不确定性推理和选项C知识表示虽然与朴素贝叶斯方法有一定的关联,但它们并不是朴素贝叶斯方法的主要应用领域或定义特性。2. 关于启发式搜索描述正确的是 ( )。

super_mochi1 391

四元数快速入门【Quaternion】

四元数(Quaternion)是用于旋转和拉伸向量的数学运算符。本文提供了一个概述,以帮助理解在空间导航等应用程序中对四元数的需求。推荐:用快速搭建3D场景。可以通过多种方式在空间中准确定位、移动和旋转物体。更熟悉和更容易可视化的滚动(Roll)、俯仰(Pitch)和偏航(Yaw)表示是有局限性的,在某些情况下应该用更强大的四元数代替。随着对象的位置和方向发生变化,称为四元数的数学工具可用于旋转和缩放原始矢量。

新缸中之脑 9562

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

四元数入门(简单容易理解)

四元数常常可以在3D的书上看到。 但我的那本3D图形学书上,在没讲四元数是干什么的之前,就列了几张纸的公 式, 大概因为自己还在上高中,不知道的太多,看了半天没看懂。。。 终于,在gameres上看到了某强人翻译的一个“4元数宝典 ”(原文是日本人写 的。。。),感觉很好,分享下。 ★旋转篇:  我将说明使用了四元数(si yuan shu, quaternion)的旋转的操作步骤

Wait的专栏 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

四元数左乘右乘_四元数入门:

补充:上一次写四元数的时候,把四元数的定义和证明过程照搬了一遍,但是看到四元数依旧是懵懵懂懂,写出来的东西也是形而上的,所以想要做个补充,因为想要照顾像我这样看了许多资料都找不到北的读者,也许有点啰嗦,还请见谅。从旋转层面理解四元数对于旋转,也许最直观的定义是一个点绕一根轴顺时针或者逆时针,旋转一定角度,得到一个新的位置。很容易想到,我们需要做的只是把轴,把角度,把原始点都输入给计算机,计算机拿到...

weixin_39614834的博客 420

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【飞控入门基础】 四元数

四元数 四元数(Quaternions)是由威廉·卢云·哈密顿在1843年爱尔兰发现的数学概念。四元数的乘法不符合交换律。如果把四元数的集合考虑成多维实数空间的话,四元数就代表着一个四维空间,相对于复数就是二维空间。四元数也称为超复数。四元数形式为: 其中a为实部,b , c , d为虚部,i , j , k为虚数单位。 i , j , k三者的关系为: 1.向量的叉乘 2...

qq_37451250的博客 2055

Unity入门学习(四)3D数学(4)之四元数Quaternion

本文简单介绍了Unity中的四元素Quaternion

FAREWELL00075的博客 2035

LearnOpenGL学习笔记—入门06 附:关于四元数

关于四元数 避免万向节死锁的真正解决方案是使用四元数(Quaternion) 本节关于四元数的理解以及它对三维旋转的作用,主要对3Blue1Brown的视频进行了描述,可以从这两个视频找到它:四元数的可视化,四元数和三维转动 1 四元数的可视化 这个视频中,3B1B给我们建立了直观印象,看四元数对四维空间都干了什么,以此来可以更好理解四元数的公式 视频中分了以下几个主题展开 1.怎样到一个只能理解一维的人来理解复数 2.向只能理解二维的人描述三维旋转 3.在三维的约束下,表现四元数在干什么 1.1 从一

清清!的博客 3116

零基础理解四元数,每个游戏入门开发必备知识

废话不多说,直接进入正题 数学好的大佬直接看原文,此文基本照搬原文,加入了一点注解,公式比较清晰!!!!! 原文地址 复数 在我们能够完全理解四元数之前,我们必须先知道四元数是怎么来的。四元数的根源其实是复数。 除了知名的数集(自然数、整数、实数、分数)之外,复数系统引入了一个新的数集——虚数。虚数的发明是为了解决一些特定的无解的方程,例如: x2+1=0 要解决这个等式,必须让x2=−1 ,这当然是不行的,因为任意实数的平方都是非负数。 一般而言,数学家是不能忍受一个等式是无解的。于是,一个新的术语被发明

weixin_40137140的博客 4635

[WebGL入门]三十一,Quaternions(四元数)

D编程的世界中,数学的知识是非常重要的。最具代表的就是矩阵了,不知道矩阵的话,就没办法进行坐标变换了。而其他的,向量的知识,内积・外积这些也都是不可缺少的。的确是非常烦人。 那么,这次的标题是四元数。不光是WebGL,在DirectX中也同样存在着四元数。它到底是个什么东西,使用它之后又有那些方便之处,我想很多人恐怕也没有明确的概念。这次就来说说四元数的定义以及它的简单的使用方法。这次真的是纯粹的数学话题,估计读起来会很枯燥,首先理解这篇文章的最大目的,然后慢慢往下看吧。

lufy小屋 3823

[WebGL入门]三十二,四元数和minMatrixb.js

这次结合实际应用,来继续了解一下。将三维空间中的坐标变换为四元数,然后进行旋转处理。 虽说,本次用来解说的demo,即使不使用四元数也能轻易的实现,但是使用了四元数之后,会更加的直观一些。 对于四元数周边的处理,会使用到本网站的算法库minMatrixb.js,还有另一个与矩阵相关的处理就是它的姐妹库minMatrix.js。四元数相关的处理是相对比较难的,使用minMatrixb.js能让简化四元数的计算。

lufy小屋 5247

具身智能入门——李群、 李代数、 四元数

具身智能 = 智能体通过物理本体与真实环境实时交互,形成「感知 → 决策 → 行动 → 再感知」的闭环,从中学习与完成任务。离身智能(disembodied):ChatGPT、文生图……它们是"脑",但没有身体,不与物理世界直接交互。像一个博学的军师,能运筹帷幄,但不能亲自上阵。具身智能(embodied):人形机器人、机械臂、自动驾驶、无人机……它们有本体(硬件载体)+ 感知器(相机/激光/IMU)+ 执行器(电机/轮子),必须在真实物理规则下干活。举个具体例子:你说"我渴了",具身智能体需要完成。

mirana的专栏 610

【新手入门】(自用)旋转矩阵、四元数与欧拉角

本文简单介绍了旋转矩阵、四元数与欧拉角之间的关系、实际应用以及可能存在的部分问题,适合新手阅读。

weixin_45132194的博客 1067

四元数可视化入门:用Python+Matplotlib理解三维旋转

本文通过Python和Matplotlib实现四元数可视化,深入解析其在三维旋转中的优势与应用。对比欧拉角的万向节死锁问题,展示四元数如何通过四维超球面表示和SLERP插值实现平滑旋转,并提供实战案例和性能优化技巧,帮助开发者掌握这一计算机图形学和机器人学中的核心工具。

weixin_29054399的博客 180
上一篇: MPU6050程序
下一篇: 微软发补丁修复Win8.1安全启动水印Bug
cucmakeit
博客等级 码龄14年 30粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值