2012-05-22 6 views
15

私はいくつかの2D描画をしたいので、いくつかのマトリックス変換を実装したいと思います。私の軽い数学のバックグラウンドでは、C#でどのようにするのかを理解しようとしています(他のどの言語でもそれが明らかです)。なぜ2D変換に3x3行列が必要ですか?

私が読んだのは、翻訳に対処するために3x3行列を扱う必要があるということです。乗算を使って翻訳を行うことはできないからです。しかし、これは行列を乗算して変換を作成することになります。だから私たちのようなもので動作:

{ x1, x2, tx } 
{ y1, y2, ty } 
{ 0, 0, 1 } 

私は3列目の平均値を理解するが、なぜ私たちは第三列が必要なのでしょうか?恒等行列だけでなく、回転、スケールまたは回転では、最後の行は同じです。私はそれが必要となるまだ到達していない操作はありますか? いくつかの言語(Java)が「二乗次元」配列でよりよく機能するためですか?もしそうなら、私は3列と2行をC#で使うことができます(ギザギザの配列もうまくいくので良いです)。例えば

、回転+平行移動のために、私はこの

{ cos(rot)*x1, (-sin(rot))*x2, tx } 
{ sin(rot)*y1, cos(rot)*y2, ty } 
{ 0,   0,    1 } 

最後の行の必要がありませんように行列を持っています。

+1

http://en.wikipedia.org/wiki/Translation_(geometry)で読書を開始し、http://en.wikipedia.org/wiki/Homogeneous_coordinatesへのリンクに従います –

+1

@HighPerformanceMark私はここにいます私が理解していないこれらの概念のどの点を説明しようとしています。はい、私は読書を始めた2つの最初の文書です。 –

答えて

26

これは我々の変換を作成行列

の乗算でこの我々は正方行列をしたい理由です。

あなたが提案したものを行い、変換に2x3行列を使用したとします。

はその後回転が

(x1, x2, 0) 
(y1, y2, 0) 

だろうと翻訳が

(1, 0, tx) 
(0, 1, ty) 

だろうと我々はポイントを表す列ベクトルで私たちの行列を乗算することにより、いずれかの回転や変換を実行できます。

(x) 
M (y) 
    (0) 

正しい答えを得るには

- どうすればの変換を行うのですか?確かに、あなたの "回転+変換のために私はこのような行列を持っています"という例のために、どうすればその行列に到達しましたか?確かに、この場合、あなたはそれを書くことができますが、一般的には?

これは私たちが、それは別の変換行列を与えること乗算2変換行列に可能でなければならない私たちの変換

を作成行列の乗算である:さて、あなたは答えを知っています。行列の乗算の規則では、次のようになります。

(. . .) (. . .) 
(. . .) (. . .) = ??? 

は有効な行列乗算ではありません。我々は、変換を構成可能にするために乗算できる行列が必要です。だから私たちは余分な行を持っています。回転と平行移動のおなじみの変換は上の均質な座標変換のフルパワーだけの特別な場合である、


今、私はここでそれを表現してきた方法は、実際には標準的な数学プレゼンテーションから完全に後方にあり、射影平面 - 私はそれが余分な行が必要な理由を示すために - 行列を正方形にするために、同様の行列で乗算することができると思います。

+0

私はまだ見ていなかった点ですね!ありがとう、あなたはAakashM。私の思考に穴を見つける時間をとってくれてありがとう。 –

+0

+1素晴らしい答え。 – Doug

+0

そして '(tx、ty)'の翻訳の実際の計算は '[x y 1] x [1 0 0; 0 1 0; tx ty 1] = [x + tx y + ty 1]である。 – Gerard

5

答えは同次座標です。回転と平行移動を1つの操作で組み合わせるには、モデルが必要とするよりもさらに1つの次元が必要です。平面のものは3つのコンポーネント、空間的なものは4つのコンポーネントです。演算子は3つのコンポーネントを取り、3つのコンポーネントを返します。

+0

しかし、2Dの{0,0,1}行の目的は何ですか?変換なしで線形変換だけでなく平行移動も計算できます。 (私が正しく理解している場合) –

+0

私が言ったように、3番目の行は3つのコンポーネント結果を生成するために必要です。他のアフィン変換では、第3成分が常に「1」でなく、第3行が「[0 0 1]」でない可能性がある。 – ja72

+0

私は行列演算にこれが必要であるという事実については考えていませんでした。それは私が予期していなかった "数学的制約"です。 (遅くなって申し訳ありません) –

関連する問題