gpt4 book ai didi

algorithm - 给定相对于球体的 X、Y 和 Z 向量,求出球体的自旋

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:55 27 4
gpt4 key购买 nike

我在 Lua 中使用 Electro 进行一些 3D 模拟,我遇到了一些数学/算法/物理问题。

我想弄清楚如何找到在某个轴上旋转的球体的“自旋”。 “自旋”是指沿球体旋转轴的矢量,其大小与其旋转速度有关。我需要此信息的原因是能够通过向球体施加反向扭矩直到它停止旋转来减慢球体的旋转。

我唯一可以访问的信息是相对于球体的 X、Y 和 Z 单位向量。也就是说,每一帧,我可以调用三个不同的函数,每个函数返回一个单位向量,分别指向球体模型的局部 X、Y 和 Z 轴方向。我可以通过基本上保留每个向量的“先前”值并将其与每帧的"new"值进行比较来跟踪每个向量是如何变化的。那么,问题是我如何使用这些信息来确定球体的自旋?我很难过。

任何帮助都会很棒。谢谢!

最佳答案

我的第一个答案是错误的。这是我编辑过的答案。

你的单位向量 X、Y、Z 可以放在一起形成一个 3x3 矩阵:

A = [[x1 y1 z1],
[x2 y2 z2],
[x3 y3 z3]]

由于 X、Y、Z 随时间变化,因此 A 也随时间变化。

A是旋转矩阵!毕竟,如果让 i=(1,0,0) 成为沿 x 轴的单位向量,则A i = X 因此 A 将 i 旋转到 X。类似地,它将 y 轴旋转到 Y 并且z轴成Z。

A 称为方向余弦矩阵 (DCM)。

所以使用 DCM to Euler axis formula

计算

theta = arccos((A_11 + A_22 + A_33 - 1)/2)

theta 是欧拉旋转角。

角速度的大小 |w| 等于

w = d(theta)/dt ~= (theta(t+dt)-theta(t)) / dt

旋转轴由 e = (e1,e2,e3) 给出

e1 = (A_32 - A_23)/(2 sin(theta))
e2 = (A_13 - A_31)/(2 sin(theta))
e3 = (A_21 - A_12)/(2 sin(theta))

关于algorithm - 给定相对于球体的 X、Y 和 Z 向量,求出球体的自旋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1733284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com