如何使用4d转子

时间:2017-07-14 17:06:24

标签: math rotation angle 4d

我尝试创建一个类似于Miegakure的4D环境。

我无法理解如何表示旋转。 Miegakure的创造者写了这篇小文章,解释他为4d转子上课。 http://marctenbosch.com/news/2011/05/4d-rotations-and-the-4d-equivalent-of-quaternions/

如何实现此类的功能?特别是旋转矢量和其他转子的函数,并得到逆?

我很欣赏一些伪代码示例。 非常感谢那些烦人回答的人。

3 个答案:

答案 0 :(得分:3)

在计算机中表示测角代数多矢量(包括转子)的最常见方法是通过一系列系数,每个规范形式代数基础元素(规范基础刀片)即一个系数。对于4D基本空间,您将拥有2 ^ 4维代数,并具有2 ^ 4维系数阵列。表示它们的一种替代方法,但可能更快的方法是使用动态调整大小的列表,其中每个元素都包含刀片的索引和相关刀片的系数。在这种情况下,两个多向量的乘法将仅使用非零基数刀片,因此在算法上应更便宜,并且在内存使用方面更轻。

就实际使用而言,我发现最简单的开始使用几何代数的地方可能是使用https://github.com/pygae/clifford的python。完全免责声明我每天都使用此库,并对此做出了广泛的贡献。该库使用系数的平面数组方法。借助此python库,您可以通过三明治产品应用4D转子,并通过波浪号运算符进行反转(转子的反转):

# Create a 4D geometric algebra with euclidean metric
from clifford.g4 import *

# Create a rotor
R = layout.randomRotor()

# Create a vector to rotate
V = layout.randomV()

# Apply the rotor to the vector
V2 = R*V*~R

N维几何代数中多矢量的几何积和逆的具体定义可以在Chris Doran和Anthony Lasenby的《物理学家几何代数》第4章中找到。

在Leo Dorst的《 Physics Algebra for Physicists》一书中或在他的网站上可以找到使用元素列表方法对N维GA进行良好C ++ GA参考实现的方法: http://www.geometricalgebra.net/code.html。总的来说,这是遗传算法的重要资源,尤其是保形模型,数值实现和关注点。

答案 1 :(得分:1)

解决围绕任意向量的旋转会让你在 4D 中疯狂。是的,有像The Euler–Rodrigues formula for 3D rotations expansion to 4D这样的方程,但是所有这些都需要求解方程组,并且在 4D 中它的使用对我们来说真的不直观。

我使用平行于平面的旋转(类似于 3D 中主轴周围的旋转)在 4D 中有6个XY,YZ,ZX,XW,YW,ZW所以只需创建旋转矩阵(类似于 3D )。我使用 5x5均匀变换矩阵用于 4D ,所以旋转看起来像这样:

xy: 
( c , s ,0.0,0.0,0.0)
(-s , c ,0.0,0.0,0.0)
(0.0,0.0,1.0,0.0,0.0)
(0.0,0.0,0.0,1.0,0.0)
(0.0,0.0,0.0,0.0,1.0)
yz: 
(1.0,0.0,0.0,0.0,0.0)
(0.0, c , s ,0.0,0.0)
(0.0,-s , c ,0.0,0.0)
(0.0,0.0,0.0,1.0,0.0)
(0.0,0.0,0.0,0.0,1.0)
zx:
( c ,0.0,-s ,0.0,0.0)
(0.0,1.0,0.0,0.0,0.0)
( s ,0.0, c ,0.0,0.0)
(0.0,0.0,0.0,1.0,0.0)
(0.0,0.0,0.0,0.0,1.0)
xw:
( c ,0.0,0.0, s ,0.0)
(0.0,1.0,0.0,0.0,0.0)
(0.0,0.0,1.0,0.0,0.0)
(-s ,0.0,0.0, c ,0.0)
(0.0,0.0,0.0,0.0,1.0)
yw:
(1.0,0.0,0.0,0.0,0.0)
(0.0, c ,0.0,-s ,0.0)
(0.0,0.0,1.0,0.0,0.0)
(0.0, s ,0.0, c ,0.0)
(0.0,0.0,0.0,0.0,1.0)
zw:
(1.0,0.0,0.0,0.0,0.0)
(0.0,1.0,0.0,0.0,0.0)
(0.0,0.0, c ,-s ,0.0)
(0.0,0.0, s , c ,0.0)
(0.0,0.0,0.0,0.0,1.0)

c=cos(a),s=sin(a)a是旋转角度。旋转轴通过坐标系原点(0,0,0,0)。有关详细信息,请查看以下内容:

答案 2 :(得分:0)

由于这个关于几何代数的YouTube系列,我能够在学习了更多关于这个主题之后使用Rotors:https://www.youtube.com/watch?v=PNlgMPzj-7Q&list=PLpzmRsG7u_gqaTo_vEseQ7U8KFvtiJY4K

它解释得很好,我推荐给那些想要做这种事情的人。

如果您已经知道四元数乘法,则转子乘法不会有任何不同,并且四元数的i,j,k单位类似于几何代数的基础bivector:e12,e13,e23

4D中的转子将是(A + B * e12 + C * e13 + D * e14 + E * e23 + F * e24 + G * e34 + H * e1234)。

可以在此页面上找到显示如何乘以这些单位的表格: http://www.euclideanspace.com/maths/algebra/clifford/d4/arithmetic/index.htm