3

いくつかの 3D シミュレーションに Lua で Electro を使用していますが、数学/アルゴリズム/物理学の問題に直面しています。

ある軸で回転している球の球の「スピン」をどのように見つけるかを理解しようとしています。「スピン」とは、球が回転している軸に沿ったベクトルを意味し、球が回転している速度に比例した大きさを持っています。この情報が必要な理由は、回転が止まるまで逆トルクを球体に適用することで、球体のスピンを遅くできるようにするためです。

私がアクセスできる唯一の情報は、球に対する X、Y、および Z の単位ベクトルです。つまり、各フレームで 3 つの異なる関数を呼び出すことができます。各関数は、それぞれ球モデルのローカル X、Y、Z 軸の方向を指す単位ベクトルを返します。基本的に各ベクトルの「前の」値を保持し、それを各フレームの「新しい」値と比較することで、これらのそれぞれがどのように変化するかを追跡できます。問題は、球のスピンを決定するためにこの情報をどのように使用するかということです。私は困惑しています。

どんな助けでも素晴らしいでしょう。ありがとう!

4

2 に答える 2

8

私の最初の答えは間違っていました。これは私の編集された答えです。

単位ベクトル 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 = XA は i を X に回転させます。同様に、y 軸を Y に回転させ、z 軸を Z に回転させます。 .

A は方向余弦行列 (DCM) と呼ばれます。

したがって、DCM からオイラー軸への式を使用すると、

コンピューティング

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))
于 2009-11-14T04:46:32.653 に答える
0

~unutbu の回答に拍手を送りますが、この問題には十分な単純なアプローチがあると思います。

連続する 3 つのフレームで X 単位ベクトルを取得し、それらを比較して 2 つのデルタを取得します。

deltaX1 = X2 - X1
deltaX2 = X3 - X2

(これらはベクトル方程式です。X1 はベクトルであり、時間 1 での X ベクトルであり、数値ではありません。)

デルタの外積を取ると、回転ベクトルの方向のベクトルが得られます。

今、大きさのために。2 つのデルタ間の角度は、1 つの時間間隔で掃引される角度なので、内積を使用します。

dx1 = deltaX1/|deltaX1|
dx2 = デルタX2/|デルタX2|
コシータ = dx1.dx2
シータ = acos(コシータ)
w = シータ/dt

精度のために、最も変化する単位ベクトル (X、Y、または Z) を選択する必要があります。

于 2009-11-15T20:15:22.637 に答える