- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名物理学家,一直在学习一些编程,并且遇到很多人使用四元数进行旋转,而不是以矩阵/向量形式编写内容。
在物理学中,我们有充分的理由不使用四元数(尽管偶尔会讲述有关汉密尔顿/吉布斯等的奇怪故事)。物理学要求我们的描述具有良好的分析行为(这有一个精确定义的含义,但在一些相当技术性的方式上远远超出了正常入门类(class)中教授的内容,所以我不会详细介绍)。事实证明,四元数没有这种良好的行为,因此它们没有用处,而向量/矩阵则有这种良好的行为,因此我们使用它们。
但是,仅限于刚性旋转和不使用任何解析结构的描述,3D 旋转可以用任何一种方式(或其他几种方式)进行等效描述。
一般来说,我们只想要一个点 X = (x, y, z) 到新点 X' = (x', y', z') 的映射,并受到 X2< 的约束/sup> = X'2。有很多事情可以做到这一点。
简单的方法是只绘制它定义的三角形并使用三角函数,或者使用点 (x, y, z) 和向量 (x, y, z) 之间的同构以及函数 f(X) = X' 和矩阵 MX = X',或使用四元数,或使用某种其他方法沿新向量投影旧向量的分量 (x, y, z)T。(a,b ,c) (x',y',z') 等
从数学的角度来看,这些描述在这种情况下都是等价的(作为定理)。它们都具有相同数量的自由度、相同数量的约束等。
那么为什么四元数似乎比向量更受青睐?
我看到的常见原因是没有万向节锁或数字问题。
无万向节锁的论点似乎很奇怪,因为这只是欧拉角的问题。它也只是一个坐标问题(就像极坐标中r=0处的奇点(雅可比行列式失去秩)),这意味着它只是一个局部问题,可以通过切换坐标、旋转出简并性来解决,或使用两个重叠的坐标系。
我不太确定数字问题,因为我不详细知道这两个(以及任何替代方案)将如何实现。我读过,重新归一化四元数比对旋转矩阵进行归一化更容易,但这仅适用于一般矩阵;旋转有额外的约束,使这一点变得微不足道(这些约束被内置在四元数的定义中)(事实上,这必须是正确的,因为它们具有相同数量的自由度)。
那么使用四元数而不是向量或其他替代方案的原因是什么?
最佳答案
万向节锁是一个原因,尽管正如您所说,这只是欧拉角的问题并且很容易解决。当需要考虑内存时,仍会使用欧拉角,因为您只需要存储 3 个数字。
对于四元数与 3x3 旋转矩阵相比,四元数在大小(4 个标量与 9 个标量)和速度(四元数乘法比 3x3 矩阵乘法快得多)方面具有优势。
请注意,所有这些旋转表示都在实践中使用。欧拉角使用最少的内存;矩阵使用更多内存,但不受万向节锁定的影响,并且具有良好的分析特性;四元数在两者之间取得了很好的平衡,重量轻,但没有万向节锁。
关于matrix - 为什么使用四元数进行旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8919086/
...沮丧。我希望我的游戏仅在横向模式下运行。我已将适当的键/值添加到 Info.plist 文件中,以强制设备方向在启动时正确。 我现在正在尝试旋转 OpenGL 坐标空间以匹配设备的坐标空间。我正
我如何创建一个旋转矩阵,将 X 旋转 a,Y 旋转 b,Z 旋转 c? 我需要公式,除非您使用的是 ardor3d api 的函数/方法。 矩阵是这样设置的 xx, xy, xz, yx, yy, y
假设我有一个包含 3 个 vector 的类(一个用于位置,一个用于缩放,一个用于旋转)我可以使用它们生成一个变换矩阵,该矩阵表示对象在 3D 空间中的位置、旋转和大小。然后我添加对象之间的父/子关系
所以我只是在玩一个小的 javascript 游戏,构建一个 pacman 游戏。你可以在这里看到它:http://codepen.io/acha5066/pen/rOyaPW 不过我对旋转有疑问。你
在我的应用程序中,我有一个 MKMapView,其中显示了多个注释。 map 根据设备的航向旋转。要旋转 map ,请执行以下语句(由方法 locationManager 调用:didUpdateHe
使用此 jquery 插件时:http://code.google.com/p/jqueryrotate/wiki/Documentation我将图像旋转 90 度,无论哪个方向,它们最终都会变得模糊
我有以下代码:CSS: .wrapper { margin:80px auto; width:300px; border:none; } .square { widt
我只想通过小部件的轴移动图像并围绕小部件的中心旋转(就像任何数字绘画软件中的 Canvas ),但它围绕其左顶点旋转...... QPainter p(this); QTransform trans;
我需要先旋转图像,然后再将其加载到 Canvas 中。据我所知,我无法使用 canvas.rotate() 旋转它,因为它会旋转整个场景。 有没有好的JS方法来旋转图片? [不依赖于浏览器的方式] 最
我需要知道我的 Android 设备屏幕何时从一个横向旋转到另一个横向(rotation_90 到 rotation_270)。在我的 Android 服务中,我重新实现了 onConfigurati
**摘要:**本篇文章主要讲解Python调用OpenCV实现图像位移操作、旋转和翻转效果,包括四部分知识:图像缩放、图像旋转、图像翻转、图像平移。 本文分享自华为云社区《[Python图像处理] 六
我只是在玩MTKView中的模板设置;并且,我一直在尝试了解以下内容: 相机的默认位置。 使用MDLMesh和MTKMesh创建基元时的默认位置。 为什么轮换还涉及翻译。 相关代码: matrix_f
我正在尝试使用包 dendexend 创建一个树状图。它创建了非常好的 gg 树状图,但不幸的是,当你把它变成一个“圆圈”时,标签跟不上。我将在下面提供一个示例。 我的距离对象在这里:http://s
我想将一个完整的 ggplot 对象旋转 90°。 我不想使用 coord_flip因为这似乎会干扰 scale="free"和 space="free"使用刻面时。 例如: qplot(as.fac
我目前可以通过首先平移到轴心点然后执行旋转最后平移回原点来围绕轴心点旋转。在我的例子中,我很容易为肩膀做到这一点。但是,我不知道如何为前臂添加绕肘部的旋转。 我已经尝试了以下围绕肘部旋转的前臂: 平移
我想使用此功能旋转然后停止在特定点或角度。现在该元素只是旋转而不停止。代码如下: $(function() { var $elie = $("#bkgimg");
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我正在尝试创建一个非常简单的关键帧动画,其中图形通过给定的中点从一个角度旋转到另一个角度。 (目的是能够通过大于 180 度的 OBTUSE 弧角来制作旋转动画,而不是让动画“作弊”并走最短路线,即通
我需要旋转 NSView 实例的框架,使其宽度变为其高度,其高度变为其宽度。该 View 包含一个字符串,并且该字符串也被旋转,这一点很重要。 我查看了 NSView 的 setFrameRotati
我正在编写一个脚本,用于在 javascript 中旋转/循环浏览图像,同时遵守循环浏览图像的次数限制。我所拥有的如下: var delay = 3000; //6000 = change to
我是一名优秀的程序员,十分优秀!