四元素还是向量?

ywlj

四元素是描述运动物体姿态的终极武器。它是由威廉·哈密顿(William Rowan Hamilton)爵士1843年在爱尔兰发现的。

会中文的数学家
哈密顿生于爱尔兰,他在十三岁前都受其叔父语言学家詹姆斯照顾。哈密顿很喜欢文学,在大学期间,他不但修读数学,还有修读经典文学。因此,他总共精通十二种语言。除了欧洲语言之外,他还懂得波斯语、马来语、阿拉伯语、梵文和中文等。他的妻子是一个神父的女儿。哈密顿最大的成就在于发现了四元数,并将之广泛应用于物理学各方面。哈密顿对光学、动力学和代数的发展提供了重要的贡献。他的成果后来成为量子力学中的主干。

金雀花之石


1843年秋的一天,哈密顿和妻子在都柏林的皇家运河边上散步。当时他正研究如何将二维的复数扩展到更高的维次。他想不出有三维的例子,但是四维却可以。他作了一个非常简单但极其具有创造性的假设:

i^2 = -1
j^2 = -1
k^2 = -1
但是
i != j !=k
另外,他的方程完全抛弃了乘法交换率,这在当时是一个极端的想法。
i * j = k; j * i = -k;
j * k = i; k * j = -i;
k * i = j; i * k = -j;
哈密顿立刻将此方程刻在附近的金雀花桥(Broom Bridge,旧称Brougham Bridge)上。后来爱尔兰国家大学梅努斯分校由1989年开始举办让数学家由Dunsink天文台走到皇家运河的行程,可惜途中已找不到哈密顿的刻石。

四元素还是向量?
发现四元素以后,哈密顿继续推广四元素。他写过多本有关的专著,其中,《四元数原理》(Elements of Quaternions)长达八百多页。但是不久,向量被发现并流行起来。一些哈密顿的支持者不遗余力地反对奥利弗·黑维塞的向量代数和约西亚·威拉德·吉布斯的向量分析的发展,以维持四元数的超然地位。而事实上,在二十世纪中叶的科学和工程界中,向量几乎已完全取代四元数的位置。
数学家认为,四元数是称为几何代数的clifford代数的一个子代数,而后者已经得到很好的研究和应用,尤其是在理论物理中。例如可以用几何代数将狭义相对论和经典电动力学表述为非常优美的形式,量子力学中讨论自旋常用的泡利矩阵实际上也是几何代数的一个子代数的矩阵表示,类似的例子还有对经典力学中刚体的转动的不可交换性的表述。
如今,四元数被使用在电脑绘图(及相关的图像分析)上表示三维物件的旋转及方位。 四元数亦见于控制论、信号处理、姿态控制、物理和轨道力学,都是用来表示旋转和方位。这是由于四元数转换组合比很多矩阵转换组合在数字上更稳定。
但是即使在今天,四元素的用途仍在争辩之中。

用四元素表示旋转
可以把四元素假象为具有4个元素的向量:
q = i * x + j * y + k * z + w
inverse q = i * x + j * y + k * z - w
每一个四元素q意味着一个旋转。
q1 * q2 表示先做一个q2旋转,再做一个q1旋转。
q 和 -q 是相同的旋转。
若要把物体沿着规范化的向量(x, y, z)绕Θ度,则依此建立q:
q = sin( Θ / 2 ) * ( x * i + y * j + k * z ) + cos( Θ / 2 )

四元素的优势
十分易于差值(interpolate)
完全消除Gimbal Lock (或者说没有奇点)
尽管最后会把四元素还原为矩阵,但是四元素在连乘的时候效率大大优于矩阵

四元素化为矩阵
1 - 2 * (y*y + z*z)  2 * (x*y - z*w)      2 * (z*x + y*w)      0
2 * (x*y + z*w)      1 - 2 * (z*z + x*x)  2 * (y*z - x*w)      0
2 * (z*x - y*w)      2 * (y*z + x*w)      1 - 2 * (x*x + y*y)  0
0                    0                    0                    1
q = ( w, x, y, z)

时间: 2024-11-10 02:43:16

四元素还是向量?的相关文章

性味归经与功能的脚本(超过四元素)

脚本名称 censor_relation_xwgj2_functions.py 需要导入中药表excel # -*- coding: utf-8 -*- """ Created on Thu Aug 25 10:06:52 2016 审核性味归经与功能的脚本(超过四元素) @author: Administrator """ import xlrd,csv import list_xwgj_function,chi_square,list_xwg

四元素与矩阵之间相互转换

1.矩阵转换为四元素 public static Quaternion QuaternionFromMatrix(Matrix4x4 m) { Quaternion q = new Quaternion(); q.w = Mathf.Sqrt(Mathf.Max(0, 1 + m[0, 0] + m[1, 1] + m[2, 2])) / 2; q.x = Mathf.Sqrt(Mathf.Max(0, 1 + m[0, 0] - m[1, 1] - m[2, 2])) / 2; q.y = M

Unity的四元素与Vector3的乘积的含义

Quaternion.Euler(x,y,z)含义是按照每个旋转轴以x,y,z旋转度旋转,例子:Quaternion.Euler(45,45,45) Quaternion与Vector3的右乘操作(*)返回一个将原有向量做旋转操作后的新向量 列如:Quaternion.Euler(0,90,0)*Vector3(0.0,0.0,-10) 相当于把向量Vector3(0.0,0.0,-10)绕y轴旋转90度,得到的结果为Vector3(-10,0.0.0.0) 原文地址:https://www.c

银行卡四元素实名认证

详情链接:http://www.haoservice.com/docs/83 银行卡实名认证,通过HTTP请求,发送持卡人姓名.银行卡号.身份证号码.银行预留手机号码参数,返回信息是否一致,以及银行卡相关信息. 支持格式: JSON/XML 请求方式: GET/POST 明文方式请求参数:   名称 类型 必填 说明   key string 是 API KEY   accountNo String 是 银行卡帐号   name String 是 持卡人姓名   idCardCode Strin

Unity四元素运用之风向标跟随箭头

using System.Collections; using System.Collections.Generic; using UnityEngine; public class WindVaneCom : MonoBehaviour { public static WindVaneCom instance { get; private set; } public bool isOn = false; public Camera cam; public GameObject T; publi

R语言多元素向量

使用冒号运算带有数值数据(数值的增加为1) # Creating a sequence from 5 to 13. v <- 5:13 print(v) # Creating a sequence from 6.6 to 12.6. v <- 6.6:12.6 print(v) # If the final element specified does not belong to the sequence then it is discarded. v <- 3.8:11.4 print

[WebGL入门]十四,绘制多边形

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 这是本次的demo的运行结果 绘制流程 这次终于该绘制多边形了,之前的文章(十一,着色器的编译和连接)中介绍了HTML,顶点着色器和片段着色器,这次看一下javascript从开始到最终的全部处理.如果前两篇文章介绍的内容完全理解的话,这次的内容也应该不难了.或许会有不容易理解的地方,不要着急

Android OpenGL ES(四)----调整屏幕的宽高比

1.宽高比问题 我们现在相当熟悉这样一个事实,在OpenGL里,我们要渲染的一切物体都要映射到X轴和Y轴上[-1,1]的范围内,对于Z轴也一样.这个范围内的坐标被称为归一化设备坐标,其独立于屏幕实际尺寸或形状. 不幸的是,因为它们独立于实际的屏幕尺寸,如果直接使用它们,我们就会遇到问题,例如在横屏模式下被压扁的桌子. 假设实际的设备分辨率以像素为单位是1280*720,这在新的Android设备上是一个常用的分辨率.为了使讨论更加容易,让我们也暂时假定OpenGL占用整个显示屏. 如果设备是在竖

机器学习算法与Python实践之(四)支持向量机(SVM)实现

机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是