8

2つの3Dベクトル間の3つのオイラー角をどのように見つけますか?ベクトルが1つあり、その回転を取得したい場合は、通常、このリンクを使用できます。回転を計算して3Dポイントを確認しますか?

しかし、お互いに応じてそれらを計算するとき、どうすればそれを行うことができますか?

4

4 に答える 4

14

他の人がすでに指摘しているように、あなたの質問は修正する必要があります。aベクトルを と と呼びましょうb。そうしlength(a)==length(b) > 0ないと質問に答えられないと思います。


ベクトルの外積を計算しますv = a x b回転軸vを与える.内積を計算することにより、で回転する角度の余弦を得ることができ、 で角度を一意に決定できます (@Archie、私の以前の間違いを指摘してくれてありがとう)。この時点で、回転の軸角度表現が得られます。cos(angle)=dot(a,b)/(length(a)length(b))acos

残りの作業は、この表現を探している表現 (オイラー角) に変換することです。あなたが見つけたように、軸角度からオイラーへの変換はそれを行う方法です。v = [ 0, 0, 0]の場合、つまり角度が 0 度または 180 度の場合は、退化したケースを処理する必要があります。


私は個人的にオイラー角が好きではありません。アプリの安定性を台無しにし、補間には適していません。

于 2013-02-27T09:55:24.513 に答える
3

まず、ベクトル 1 に対するベクトル 2 を得るために、ベクトル 2 からベクトル 1 を減算する必要があります。これらの値を使用して、オイラー角を計算できます。

ベクトルからオイラーへの計算を直感的に理解するために、半径が 1 で中心が原点の球を想像してみましょう。ベクトルは、3D 座標でその表面上の点を表します。この点は、球状の 2D 座標 (それぞれ緯度と経度、ピッチとヨー) で定義することもできます。

「ロール <- ピッチ <- ヨー」の順序で、次のように計算できます。

ヨーを計算するには、象限を考慮して 2 つの平面軸 (x と z) のタンジェントを計算します。

yaw = atan2(x, z) *180.0/PI;

ピッチはまったく同じですが、その平面がヨーとともに回転するため、「隣接」は 2 つの軸上にあります。その長さを見つけるには、ピタゴラスの定理を使用する必要があります。

float padj = sqrt(pow(x, 2) + pow(z, 2)); 
pitch = atan2(padj, y) *180.0/PI;

ノート:

  • ベクトルには自身の軸を中心とした回転がないため、ロールは計算できません。通常は 0 に設定します。
  • ベクトルの長さは失われ、元に戻すことはできません。
  • オイラーでは、軸の順序が重要です。それらを混同すると、異なる結果が得られます。
于 2014-03-05T15:29:52.593 に答える