我在Lua中使用Electro进行一些3D模拟,而且我正在尝试一些数学/算法/物理障碍.
我试图弄清楚如何找到在某个轴上旋转的球体球体的"旋转"."旋转"是指沿着轴旋转的向量,其幅度相对于旋转的速度.我需要这些信息的原因是能够通过向球体施加反向扭矩来减慢球体的旋转,直到它停止旋转.
我可以访问的唯一信息是相对于球体的X,Y和Z单位向量.也就是说,每个帧,我可以调用三个不同的函数,每个函数返回一个单位向量,分别指向球体模型的局部X,Y和Z轴的方向.我可以通过基本上保持每个向量的"先前"值并将其与每个帧的"新"值进行比较来跟踪每个变化的方式.那么,问题是我如何使用这些信息来确定球体的旋转?我很难过.
任何帮助都会很棒.谢谢!
我的第一个答案是错的.这是我编辑的答案.
您的单位矢量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到Euler轴公式
计算
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))