0

オブジェクトのクォータニオン q と、3D 空間を形成する基底ベクトル vx、vy、vz が与えられた場合、クォータニオンがすべての基底ベクトルに対して平行か垂直かを確認するにはどうすればよいですか?

たとえば、基底ベクトルがあります。

vx = (0.447410, 0, -0.894329)
vy = (0, 1, 0)
vz = (0.894329, 0, 0.447410)

およびクォータニオン

q(w,x,y,z) = (-0.973224, 0, -0.229860, 0)

四元数がすべての基底ベクトルに対して垂直または平行 (または反平行) であることはわかっていますが、実際にどのように計算すればよいでしょうか?

もう一つの例、

q(w,x,y,z) = (0.823991, 0, 0.566602, 0)

これは、すべての基底ベクトルに対して垂直または平行 (または反平行) ではありません。

4

2 に答える 2

1

用語に関する注意: 厳密に言えば、「四元数が基底ベクトルの 1 つに垂直である」という意味が正確には明確ではありません...四元数と 3-D ベクトルはそのように比較できません。ただし、クォータニオンは、回転軸 (3 次元ベクトル) およびスカラー回転角度の表現と考えることができるため、回転軸が基底ベクトルの 1 つに対して垂直であるかどうかを知りたいと仮定します。

3-D 回転と見なされる単位四元数の場合、q=(w,x,y,z) の場合、x、y、および z は回転軸に沿って 3-D ベクトル (qv と呼びましょう) を形成します。 w=cos(alpha/2) は回転角アルファを表します。

あなたの場合、qv = (x,y,z) = (0, -0.229860, 0) です。vx、vy、および vz はすべて単位ベクトルであるため、qv も単位ベクトルになるように正規化すると、何が起こっているかを簡単に確認できます。その長さ (0.229860) で割り、qv_unit = (0, -1, 0) を取得します。qv_unit と vx、vy、および vz の間の角度を見つけるには、内積を使用します。

単位ベクトル v1=(a, b, c) および v2=(d, e, f) の場合:

cos(シータ) = v1 ドット v2 = ad + be + cf

qv_unit dot vx = 0*.447410 + -1*0 + 0*-894329 = 0 = cos(theta) なので、theta=pi/2 で、qv_unit が vx に垂直であることがわかります。

qv_unit dot vy = 0*0 + -1*1 + 0*0 = -1 = cos(theta) なので、theta=pi であり、qv_unit は vy に対して反平行です。

qv_unit dot vz = 0*.894329 + -1*0 + 0*.447410 = 0 = cos(theta) なので、theta=pi/2 で、qv_unit も vz に垂直です。

于 2010-08-20T06:28:12.137 に答える
1

四元数を行列に変換することでこれを解決しました。行列から基底ベクトルを取得し、行列基底ベクトルと元の基底ベクトルの間の内積を計算します。それらがすべて 0 または 1 の場合、クォータニオンは元の基底ベクトルに対して平行または垂直です。

于 2010-08-20T11:31:14.903 に答える