1

私はカメラを回転させてシーンの写真を撮ると、カメラを安定に保ち、逆の方法でシーンを回転させると同じ結果が得られると思います。カメラの回転とシーンポイントの回転の違い(シーン全体ではなく、ポイントのみ)

元のカメラ回転行列をR1とします。カメラを回転させると、別の回転行列R12が適用されます(したがって、R2 = R12 * R1が新しい回転行列です)。 Xはシーンポイントの現実世界座標であると仮定する。逆の方法でシーンポイントを回転させることは、逆回転行列R12^-1をXに適用することを意味します(これは間違っている可能性があります)。

なぜ(R12 * R1)X != R1(R12^-1 * X)?

私が間違っていることを誰でも説明できますか?

P.S.私はプログラミングと2つの方法の複雑さについては求めていません。私はちょうど知りたい

(1)アクション

「のシーンを回転させる」ための私の仮定の式が正しいかどうか(2)、しないのはなぜ数学の方程式「のシーンを回転させる」ための数式私が説明したように、現実世界の現象を反映しています。

編集1Spektreの答え、私は回転行列Rと、シーン全体を回転させたときに、新しいカメラの回転行列は、この場合

R^-1*R1 

であるによると、Iが回転回転行列R12^-1で、シーン全体、そして新しいカメラの回転行列が

(R12^-1)^-1*R1=R12*R1 

しかし、私はカメラを回転することrotatiと同等であることを何を考えている場合でありますシーンポイントX(のみシーンポイントX、シーン全体ではありません)。その時、カメラの回転行列は依然としてR1です。しかし、シーンポイントXはX 'になります。そして、X 'の画像座標はR1 * X'である。 X 'の式は何ですか?もちろん

R1*X' = R12*R1*X 

こと注意、あなたは

X'=R1^-1*R12*R1*X 

ことを答えることができる。しかし、私はXが思う「のみR12およびXによって定義されるべきである(R1は、Xを形成することが知られている必要はありません」 )。だから私は「シーンポイントを回転させるための数学的な式は何か」と尋ねる。 X 'は、R12に関連する回転行列によって「回転X」というアクションの結果です。

私は、カメラが回転していないのに移動している場合の別の例があります。私は自分の目の前に立っているモデルの写真を撮っているとします。彼女の位置はXです。私の位置はCです。最初の場合、私は(私の)右に移動し、最初の写真を撮ります。 2番目のケースでは、私は移動しませんが、モデルは同じステップで左(私の)移動し、2番目の写真を撮ります。 2つの画像におけるモデルの位置は同一でなければならない。これは、-R1 * Cは並進ベクトルである場合I、-R1 *(C + D)は並進ベクトルである(私は真であることが確認された)上式において

[R1 -R1*(C+d)]*X = [R1 -R1*C]*(X-d) 

数式で表されます。私の右に動く、(Xd)彼女が私の左に移動するときのモデルの位置です。

上記の例では、X '= X-d(したがってX'はXと移動dで定義されます)。カメラを回転させる場合、X 'とは何ですか?

編集2からSpektreはまだ私の質問を理解していません。 2番目のケースでは、全世界を回転させないで、ポイントXを回転させるだけです(世界全体を回転させると、ワールド座標が回転した後のワールド座標は同じですが、 Xだけ回転すると、そのワールド座標はX 'に変更されます)。

モデルの写真を撮影する例を想像してみてください。最初のケースでは、私はカメラを回転させ、彼女の最初の写真(そして彼女の隣に立っている彼女の少年の友人)を撮ります。

2番目のケースでは、モデルを逆方向​​に回転させます(彼女の男の子の友人は安定しています)。次に2番目の写真を撮ります。 2つの写真を比較すると、モデルの位置は同じです(男の子の友達の位置は違うでしょう)。

どちらの場合でも、男の子の友人の実際の位置は同じです。しかしモデルの現実世界の位置は、私が彼女を回してからの2番目のケースで変更されます。私の質問は、私が彼女を回転させた後の彼女の現実世界の位置は何ですか?

答えて

1

タイトルへの答えは次のとおりです。は数学的に、彼らは両方(すべての操作の反転を除く)はほぼ同じですが、物理的にカメラを回転させることができ、単一の行列を変更するが、シーンを回転させるために、あなたが(あなたの世界のすべてのオブジェクトを回転しなければならないことを意味しますたくさんの低速で数千人以上)...

ことしかし、私は本当の問題は、線形代数行列方程式についてあるとしてタイトルとテキストは誤解を招くと仮定します。

R1,R2,R12サイズN x NXの正方行列とするには、サイズNのベクトルです。そう

R2 = R12.R1 
R1 = Inverse(R12).R2 

::私たちは、あなたの大会のためのベクトルの向き(N x 11 x N)を無視した場合

R12.R1.X == R12.Inverse(R12).R2.X == R2.X 

を使用すると、行列乗算の順序を変更するので、あなたが見ることができるようにあなたの質問内の式が間違っています理由は次のとおりです。

R1.R12 != R12.R1 

さらに詳しく知りたい場合は、なぜ線形代数を調べますか。

[EDIT1]簡単な1x1

てみましょう:

R1 = 1 
R12= 2 
R2 = R12.R1 = 2 

ので、あなたの間違った方程式の書き換え:

R12*R1*X != R1*Inverse(R12)*X 
    2* 1*X != 1*   0.5*X 
    2*X != 0.5*X 

をして使用して正しいもの

R12*R1*X == R12*Inverse(R12)*R2*X == R2*X 
    2* 1*X == 2*   0.5* 2*X == 2*X 
    2*X == 2*X == 2*X 
あなたは R1でカメラを回転させてしまった左側に

2D exmaple

:私はあなたがそうまだここに問題の2D例混乱している参照

[EDIT2]シンプルな2Dの例

ワールド座標(x,y)をそのローカル座標(x1,y1)に変換するレンダリング用です。右は状況が逆転しているため、カメラ座標系が軸に整列され(単位行列)、シーンが逆回転でInverse(R1)になります。それはどのように動作するのですか(ここではR1が相対的な行列です)。相対行列がR12R1あるので、私はあなたの行列名と規則にポートにそれをしようとした場合

は今のカメラです:

(R1.R12).(x,y) = (x1,y1) 
Inverse(R1.R12).(x1,y1) = (x,y) 
+0

は、あなたの答えをいただき、ありがとうございます。しかし、私が求めていることは、あなたが答えるものとはまったく異なります。 私はプログラミングと複雑さについては問いません。 –

+0

私の質問は、数学的方程式が現実世界の状況を反映していない理由です。 実際には、カメラを回転させて最初の写真を撮影します。 2番目の写真はカメラが安定した状態で撮影されますが、逆の方法でシーンが回転します。本当の世界では、私は2つのイメージが同じであると思います。 (そうでない場合は、理由を教えてください) 私の最初の質問は、「逆の方法でシーンを回転させる」というアクションの数学的な式は何ですか? R12^-1 * Xですか? 私の2番目の質問は:もしそうなら、なぜ(R12 * R1)* X!= R1 *(R12^-1)* X? –

+0

@JamesDoだから、私はちょうど答えの残りの部分を読んでいなかったのです(後で: "私は仮定します")。行列の順序を変更することはできません。はい逆行列は逆の演算です。 'Y = R12.X'ならば'(R12^-1).Y = X'最後のコメントの方程式は、 'R1'の代わりに' R2'を使うべきではないでしょう。方程式は 'R12 .R1.X == R12.Inverse(R12).R2.X == R2.X' – Spektre

関連する問題