• 締切済み

3次元回転の類似度について教えてください

3次元の回転を表すR1,R2があったとき、両者がどの程度「似ているか・近いか」 を表す指標で何かよいものはありますでしょうか? R1=R2のときに最も「似ている」となる指標です。 (回転の表現は回転行列、四元数など何でも構いません。) 具体的には、ある計算に基づいて3次元の回転量補正量(四元数で表現しています) を求めているのですが、計算過程のパラメータが時々刻々と変化する誤差を含んで いるため、計算するたびに異なる結果が出てしまいます。 大半はだいたい「似ている」回転であるようなのですが、たまに大きくズレたものが 出ているようなので、ある評価基準で3次元回転の「似ている・似ていない」 を決めたいと考えています。たとえば四元数の場合だと回転の軸と回転量で 表現されるので、単純にそれぞれ比較・・・というのはちょっと違う気がしています。 よろしくおねがいいたします。

みんなの回答

回答No.3

お気づきの通り、二つの回転行列P,Qに対して d(P,Q) := √( ∫|Px - Qx|^2 dS ), ただしx∈単位球面、dS は面素、 とすると d は距離になります。この面積分を、教科書の公式 ∫ F(x, y, z) dS (←(x, y, z) は単位球面上を動く) = ∫_[0,π]dθ ∫_[0,2π]dφ ( F(sinθcosφ, sinθsinφ, cosθ) sinθ )  (重積分) で実際に計算すると、(過程は省略しますが)結局次の式が得られます: |d(P, Q)|^2 = (4π/3) Σ_{i,j=1}^{3} ( | P_ij - Q_ij |^2 ), ただしP_ij, Q_ij は行列P,Q の成分を表すものとします。 ここで面白いのは、行列(P-Q)の自乗ノルムが上式右辺に出て来ることと、a=(1, 0, 0), b=(0, 1, 0), c=(0, 0, 1)に対して、 |d(P, Q)|^2 = (4π/3) { |Pa - Qa| + |Pb - Qb| + |Pc - Qc| } と書けてしまうことです。

menkata55
質問者

お礼

ご回答ありがとうございます. なるほど、比例定数の(4π/3)を除いて考えると 単純な回転行列の自乗ノルムになるということですね。 なんとも衝撃的な(当たり前ですか??)結果です。 P,Qによって移された点間の距離を直線で測っている 問題はありますが、距離の要件は満たしているので これで十分実用になりそうです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

私も、もろ参考ですが… 半径1の球面上に、できるだけ分散させて、n = 100個ほどの点をとり、 それを (x1,y1,z1),…,(xn,yn,zn) とおきます。 そして、(xk,yk,zk) を R1 で回転させた点を (xk1,yk1,zk1) とします。 同様に、(xk,yk,zk) を R2 で回転させた点を (xk2,yk2,zk2) とします。 そして、 V = Σ[k=1~n] { (xk1 - xk2)^2 + (yk1 - yk2)^2 + (zk1 - zk2)^2 } を、似ているかどうかの指標にするのはいかがでしょうか。 原理は簡単ですが、難点は計算量が多くなることです。

menkata55
質問者

お礼

ご回答ありがとうございます。 実は私も質問させていただいた後いろいろ考えまして、 ほとんど同じようなアイディア d(R1,R2) := (∫|R1x - R2x|^2 dx)^(1/2) 但し積分の範囲→ x∈単位球面 が良いのではないかと思っていました。 球面に沿って回転した点間の距離を直線で測ることになりますが、 d(R1,R2) >= 0 d(R1,R2) = 0 when R1=R2 d(R1,R2) = d(R2,R1) d(P,R) <= d(P,Q)+d(Q,R) を満たすので、距離としての性質は悪くなさそうです。 もう少し考えてみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
noname#221368
noname#221368
回答No.1

 もろ参考です。  回転角が時間の関数になっていると想像しました。微小時間ごとの無限小回転を表す反対称行列は、独立成分が3個なので、だいぶ楽になるような気がします。各瞬間ごとに、無限小回転を比較してみるというのはどうでしょう?。Data量が増えるのが厄介ですけど・・・。

menkata55
質問者

お礼

ご回答ありがとうございます! なるほど、無限小回転と考えてパラメータを減らすわけですね。 参考にして考えてみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 3次元空間の回転行列

    3次元空間上の点A(X,Y,Z)と点B(X',Y',Z')があるとします。ただし、点Bは、点Aを原点Oを中心とする3次元空間の回転をさせることによって得られる点とします。 このAをBへと回転させる行列を、特に以下のように考えて得られる回転行列として導出する方法を教えてください。 O,A,Bによって作られる平面に直交し、原点を通る軸を回転軸として、それを軸にAを∠AOB回転させる。 一応自分なりに考えたこの回転行列を求める方法としては、まず ベクトルOA、OBに対してシュミットの直交化を用いて新たな正規直交基底、Vx、Vy、Vzを求めます。ただし、はじめのVxの導出にはOAを用い、VzはVxとVyの外積を計算しました。 次にP=(Vx,Vy,Vz)として座標変換の行列Pを作ります。 そして、求める行列Wを W = PMz(P^-1) (Mzはz軸まわりに∠AOB回転させる行列、P^-1はPの逆行列) として導出しました。 このようにして解く方法を考えたのですが、これは正しいのでしょうか? また、これ以外にもっとスマートに解く方法があれば教えてください。 よろしくお願いします。

  • 誤差を最小化する相似変換行列の求め方

    三次元の変換行列について質問です。 空間上のある3点について、座標変換前と変換後の座標が与えられているとします。 その座標を元に、行った変換の表す行列を知りたいと考えております。 ただし変換は並進と回転のみとし、剪断変形等は行わないという条件です。 (行列は同次変換の形などで得られれば良いです) ただし、変換前と変換後では三点の相対的な位置関係は完璧には一致しておりません。 そのため得られた変換を元の3点に行った際に、変換後の3点の座標(既知)との 誤差を最小化したいという問題です。 変換が相似変換でなければ疑似逆行列により計算が可能と思いますが、 並進・回転のみなのでどうしようか聞きたいと思い質問をしました。 パラメータは「x, y, z 軸方向の並進移動量 + x, y, z 軸周りの回転量」の6つなので、 プログラムを組んで6パラメータを少しずつ変化させ、 誤差の二乗和が最小となる箇所を探すという方法は思いついております。 ですが、その他に行列計算により解析的に答えを得る方法はないでしょうか。 また、変換前後の3点を元に誤差を最小化する変換行列を得ることが可能であるなら、 座標の情報が3点でなくそれ以上の場合でも計算は可能でしょうか。 よろしくお願いいたします。

  • wikipediaの四元数を使った三次元の回転の項目について

    wikipedia上の四元数について説明してあるページについて質問があります。 http://ja.wikipedia.org/wiki/%E5%9B%9B%E5%85%83%E6%95%B0#.E4.B8.89.E6.AC.A1.E5.85.83.E3.81.AE.E5.9B.9E.E8.BB.A2 三次元の回転の項目に >>回転を表す四元数をq、回転させたいベクトルをv、qの共役四元数をq'とすると、回転後のベクトルv′は >>v′ = qvq' >>で得られる。 と記述してあるのですが、 >>v′ = q'vq ではないのでしょうか? 誰かどちらが正しいのか教えていただけないでしょうか。

  • 誤差を最小化する相似変換行列の求め方

    三次元の変換行列について質問です。 空間上のある3点について、座標変換前と変換後の座標が与えられているとします。 その座標を元に、行った変換の表す行列を知りたいと考えております。 ただし変換は並進と回転のみとし、剪断変形等は行わないという条件です。 (行列は同次変換の形などで得られれば良いです) ただし、変換前と変換後では三点の相対的な位置関係は完璧には一致しておりません。 そのため得られた変換を元の3点に行った際に、変換後の3点の座標(既知)との 誤差を最小化したいという問題です。 変換が相似変換でなければ疑似逆行列により計算が可能と思いますが、 並進・回転のみなのでどうしようか聞きたいと思い質問をしました。 パラメータは「x, y, z 軸方向の並進移動量 + x, y, z 軸周りの回転量」の6つなので、 プログラムを組んで6パラメータを少しずつ変化させ、 誤差の二乗和が最小となる箇所を探すという方法は思いついております。 ですが、その他に行列計算により解析的に答えを得る方法はないでしょうか。 また、変換前後の3点を元に誤差を最小化する変換行列を得ることが可能であるなら、 座標の情報が3点でなくそれ以上の場合でも計算は可能でしょうか。 質問は数学のようですが、この手の計算はCGや画像処理等で多く行われていると 感じたことから、情報工学カテゴリーで質問をさせて頂きました。 よろしくお願いいたします。

  • テンソル代数を表現する多元数は有りますか。

     多元数と言っても、2重化の繰り返しで生成するものではなく、和田博著『ベクトルを回す複素数・四元数・... ・多元数』、『ベクトルの回転演算子』で発表された、結合法則が完璧に成り立つ多元数ですが。  複素数や四元数は、行列を表現でき、逆もまた真らしいですが。

  • 3次元空間における平行回転移動の行列を使ったプログラム

    Cまたは、C++で、3次元空間における (x,y,z)成分4点で出来ている四角形を任意に入力して、 XY平面と平行になるように回転したのちに平行移動をする行列を使ったプログラムを作りたいのですが、行列の計算がうまくいきません。 知識不足なのは自覚しています。。。 ソースを比較して勉強したいと思っています。よろしくお願いします。

  • 3次元のリッチスカラー 一般相対論 リーマン幾何

    3次元球面のリッチスカラー曲率についての疑問です。 よく知られたように、2次元球面(半径r)のガウス曲率はK=1/r^2 で、 リッチスカラー曲率はR=2/r^2 です。両者にはR=2Kの関係があります。 本やwikipediaなどによると、 一般的に、半径rのn次元球面のリッチスカラー曲率はR=n(n-1)/r^2 となるようです。(ガウス曲率との関係は R=n(n-1)K です) http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AB%E3%83%A9%E3%83%BC%E6%9B%B2%E7%8E%87 そうすると、3次元球面のリッチスカラー曲率は R=6/r^2 になります。 (閉じたロバートソン・ウォーカー時空の、空間部分にあたるものです) ここで疑問なのですが、なぜ3次元の曲がりなのに、 r^2のような2次元の曲がりの量を用いて表現可能なのでしょうか? 2次元の曲率が1/r^2 に関係する量になることは、 ガウス曲率の定義(1次元の曲率 1/r の2方向の曲がりの積を取る) などからも素直に理解できます。 3次元で素直に考えると、3次元のガウス曲率は3方向の曲がりの積を取り、 1/r^3のように表現され、リッチスカラー曲率もr^3の逆数に比例する量で 表されそうな気がしてしまいます。 「空間の曲がり」が「曲面の曲がり」で表現できてしまう事が どうもよく分からずにいます。どうぞよろしくお願い致します。

  • 部分空間の次元

    次のベクトルによって生成されるR^4の部分空間の次元が3となるようにaの値を定めよ。 (1,0,1,0)(1,2,1,1)(2,3,-1,a)(0,1,3,2a-1)(a-4,-6,3,-2a) 行列の掃き出し法で階数rankを出し、それが3になるように計算したのですが、なかなか、階数行列に持っていけません。この方法で合っているのでしょうか?また、解法が違う方法なんでしょうか? 解法を教えてください。

  • 3次元の回転角度の求め方について教えてください。

    3次元の回転角度の求め方について教えてください。 3軸の加速度センサーがあります。 まず加速度センサーのZ軸を重力方向に置いたときの加速度センサーの値を(x1,y1,z1)=(0,0,1)とします。 加速度センサーのx軸、y軸、z軸をそれぞれ回転させたあとの加速度センサーの値を(x2,y2,z2)とします (このとき加速度センサーは静止しているので、センサーの値は重力の分力になります)。 (x2,y2,z2)が既知のとき(x1,y1,z1)に戻すためのそれぞれの回転角はどのように求めれば良いのか教えてください。 (x2,y2,z2)→(x1,y1,z1)へ移動するときの回転角を φ(z軸の回転角)、ψ(x軸の回転角)、θ(y軸の回転角) とします。 回転行列 (x1) = (cosφ -sinφ 0) (cosθ 0 sinθ) (1 0 0 ) (x2) (y1) = (sinφ cosφ 0) (0 1 0 ) (0 cosψ -sinψ) (y2) (z1) = (0 0 1) (-sinθ 0 cosθ) (0 sinψ cosψ ) (z2) より,3行3列の行列を計算すると 0=cosφcosθx2 + (-sinφcosψ+cosφsinθsinψ)y2+(sinφsinψ+cosφsinθcosψ)z2 0=sinφcosθx2 + (cosφcosψ+sinφsinθsinψ)y2+(-cosφsinψ+sinφsinθcosψ)z2 1=-sinθx2 + cosθsinψy2 + cosθcosψz2 となると思うのですが、この式からφ、ψ、θが導きだせません。 どうすれば求めることができるか教えていただけますか。

  • 剛体運動の回転方向について

     コンピュータを使って、3次元空間での剛体の回転運動のシミュレーションを作っております。回転について少し混乱してきたので、教えてください。 物体の基本姿勢での慣性テンソルを Iobj 時刻tでの角運動量を L(t) 時刻tでの角速度を ω(t) 時刻tでの姿勢を θ(t) 時刻tでの姿勢を表す回転行列を R(t) (基本姿勢を時刻tでの姿勢に回転させる行列) としたときの回転を考えると、 ω(t) = (R(t) Iobj R(t)')^-1 L(t) (R(t)' は R(t) の転置行列です) θ(t) = θ(t-Δt) + ω(t)Δt となることが分かってきました。ここで、最初の行で求まる ω(t) というのは、ワールド座標系(物体の外側の変化しない観測者)から見た方向の速度なのでしょうか?それとも、ローカル座標系(物体の現在の姿勢)から見た方向の速度なのでしょうか? 自分でも混乱していますので何か間違えているかもしれませんが、回転の基準について分からなくなってきたので、教えてください。