知識ベース

変換マトリックス

線形代数の中心オブジェクト。ベクトルへのベクトルのマッピング

線形代数では、線形変換は行列で表すことができます。 T {\ displaystyle T}がRn {\ displaystyle \ mathbb {R} ^ {n}}をRm {\ displaystyle \ mathbb {R} ^ {m}}およびx→{\ displaystyle {\ vec {x}}}は、n {\ displaystyle n}エントリを持つ列ベクトルです。

T(x→)= Ax→{\ displaystyle T({\ vec {x}})= \ mathbf {A} {\ vec {x}}}

一部のm×n {\ displaystyle m \ times n}行列A {\ displaystyle A}については、T {\ displaystyle T}の変換行列と呼ばれます。 A {\ displaystyle A}にはm {\ displaystyle m}行とn {\ displaystyle n}列がありますが、変換T {\ displaystyle T}はRn {\ displaystyle \ mathbb {R} ^ {n}}からのものです。 Rm {\ displaystyle \ mathbb {R} ^ {m}}へ。一部の著者が好む行ベクトルを含む変換行列の代替表現があります。

用途

行列を使用すると、計算に適した一貫した形式で任意の線形変換を表示できます。これにより、変換を簡単に連結することもできます(行列を乗算することにより)。

行列で表現できるのは線形変換だけではありません。 n次元ユークリッド空間R n上非線形であるいくつかの変換は、n + 1次元の空間R nは +1に線形変換として表すことができます。これらには、アフィン変換(翻訳など)と射影変換の両方が含まれます。このため、4×4変換行列は3Dコンピュータグラフィックスで広く使用されています。これらのn +1次元変換行列は、アプリケーションに応じて、 アフィン変換行列射影変換行列 、またはより一般的には非線形変換行列と呼ばれます。 n次元マトリックスに関して、 n +1次元マトリックスは拡張マトリックスとして説明できます。

物理科学では、アクティブな変換はシステムの物理的な位置を実際に変更するものであり、座標系がない場合でも意味がありますが、パッシブな変換は物理的なシステムの座標記述の変更です(基底の変更)。アクティブ変換とパッシブ変換の区別は重要です。デフォルトでは、 変換によって、数学者は通常アクティブな変換を意味しますが、物理学者はどちらを意味する場合もあります。

言い換えると、 受動変換とは、2つの異なる座標フレームから見た同じオブジェクトの記述を指します。

変換の行列を見つける

関数形式の線形変換T(x){\ displaystyle T(x)}がある場合、標準基底の各ベクトルをTで変換し、その結果をに挿入することにより、変換行列Aを簡単に決定できます。行列の列。言い換えると、

A = {\ displaystyle \ mathbf {A} = {\ begin {bmatrix} T({\ vec {e}} _ {1})&T({\ vec {e}} _ {2})&\ cdots&T( {\ vec {e}} _ {n})\ end {bmatrix}}}

たとえば、関数T(x)= 5x {\ displaystyle T(x)= 5x}は線形変換です。上記のプロセスを適用すると(この場合n = 2と仮定)、次のことが明らかになります。

T(x→)= 5x→= 5Ix→= x→{\ displaystyle T({\ vec {x}})= 5 {\ vec {x}} = 5 \ mathbf {I} {\ vec {x}} = {\ begin {bmatrix} 5 && 0 \\ 0 && 5 \ end {bmatrix}} {\ vec {x}}}

ベクトルと演算子の行列表現は、選択した基底に依存することに注意する必要があります。同様のマトリックスが代替ベースから得られます。それでも、コンポーネントを見つける方法は同じままです。

詳述すると、ベクトルvは基底ベクトルE = {\ displaystyle E =}で表現でき、座標E = T {\ displaystyle _ {E} = ^ {T}}があります。

v→= v1e→1 + v2e→2 +…+ vne→n = ∑vie→i = EE {\ displaystyle {\ vec {v}} = v_ {1} {\ vec {e}} _ {1} + v_ {2} {\ vec {e}} _ {2} + \ ldots + v_ {n} {\ vec {e}} _ {n} = \ sum v_ {i} {\ vec {e}} _ { i} = E_ {E}}

次に、v→{\ displaystyle {\ vec {v}}}の変換行列Aの結果を、与えられた基準で表現します。

A(v→)= A(∑vie→i)= ∑viA(e→i)= A(e→1)A(e→2)…A(e→n)E =A⋅E= a1,1a1 、2…a1、na2,1a2,2…a2、n⋮⋮⋱⋮an、1an、2…an、ne→1e→2…e→n {\ displaystyle {\ begin {aligned} A({\ vec { v}})&= A \ left(\ sum v_ {i} {\ vec {e}} _ {i} \ right)= \ sum {v_ {i} A({\ vec {e}} _ {i })} = A({\ vec {e}} _ {1})A({\ vec {e}} _ {2})\ ldots A({\ vec {e}} _ {n})_ { E} \\&= A \ cdot _ {E} = {\ begin {bmatrix} a_ {1,1}&a_ {1,2}&\ ldots&a_ {1、n} \\ a_ {2,1}&a_ {2,2}&\ ldots&a_ {2、n} \\\ vdots&\ vdots&\ ddots&\ vdots \\ a_ {n、1}&a_ {n、2}&\ ldots&a_ {n、n} \\\ end {bmatrix}} {\ begin {bmatrix} v_ {1} \\ v_ {2} \\\ vdots \\ v_ {n} \ end {bmatrix}} \ end {aligned}}}

マトリックスAのai、j {\ displaystyle a_ {i、j}}要素は、Aをすべてのe→j = T {\ displaystyle {\ vec {e}} _ {j} = ^ {T}}、および応答ベクトルの観察

ai、j = Ae→j = A1,1e1、j + A1,2e2、j +…+ A1、nen、j = ∑i = 1nA1、iei、j。{\ displaystyle a_ {i、j} = A _ {} { \ vec {e}} _ {j} = A_ {1,1} e_ {1、j} + A_ {1,2} e_ {2、j} + \ ldots + A_ {1、n} e_ {n、 j} = \ sum _ {i = 1} ^ {n} A_ {1、i} e_ {i、j}。}

この方程式は、行列Aのj番目の列の必要な要素ai、j {\ displaystyle a_ {i、j}}を定義します。

固有基底と対角行列

ただし、成分が対角行列を形成する演算子には特別な基礎があり、乗算の複雑さはnに減少します。対角であることは、すべての係数ai、j {\ displaystyle a_ {i、j}}を除くが、ai、i {\ displaystyle a_ {i、i}}はゼロであり、合計sumai、je→i {\上記のdisplaystyle \ sum a_ {i、j} {\ vec {e}} _ {i}}。生き残っている対角要素ai、i {\ displaystyle a_ {i、i}}は固有値として知られており、定義式でλi{\ displaystyle \ lambda _ {i}}で指定され、Ae→i =λieになります。 →i {\ displaystyle A {\ vec {e}} _ {i} = \ lambda _ {i} {\ vec {e}} _ {i}}。結果の方程式は、 固有値方程式として知られています 。固有ベクトルと固有値は、 特性多項式を介してそれから導出されます。

対角化により、多くの場合、固有ベースへの変換および固有ベースからの変換が可能です。

2Dコンピュータグラフィックスの例

原点を固定したままにする最も一般的な幾何学的変換は、回転、スケーリング、せん断、反射、および正射影を含む線形です。アフィン変換が純粋な変換ではない場合、ある点が固定され、その点を原点として選択して変換を線形にすることができます。 2次元では、2×2変換行列を使用して線形変換を表すことができます。

ストレッチング

xy平面のストレッチは、特定の方向のすべての距離を一定の係数で拡大する線形変換ですが、垂直方向の距離には影響しません。 X軸とY軸に沿ったストレッチのみを考慮します。 x軸に沿ったストレッチの形式はx '= kx;です。 y '= yが正の定数kの場合。 (kが> 1の場合、これは実際には「ストレッチ」です。kが1の場合、技術的には「圧縮」ですが、それでもストレッチと呼びます。また、k = 1の場合、変換アイデンティティです。つまり、効果はありません。)

x軸に沿った係数kによるストレッチに関連付けられた行列は、次の式で与えられます。

{\ displaystyle {\ begin {bmatrix} k&0 \\ 0&1 \ end {bmatrix}}}

同様に、y軸に沿った係数kによるストレッチの形式はx '= x;です。 y '= ky、したがって、この変換に関連付けられた行列は

{\ displaystyle {\ begin {bmatrix} 1&0 \\ 0&k \ end {bmatrix}}}

絞る

上記の2つのストレッチが逆数値と組み合わされている場合、変換行列はスクイーズマッピングを表します。

。{\ displaystyle {\ begin {bmatrix} k&0 \\ 0&1 / k \ end {bmatrix}}。}

軸に平行な辺を持つ正方形は、正方形と同じ面積を持つ長方形に変換されます。相互の伸縮と圧縮により、面積は不変になります。

回転

原点を中心に時計回りに角度θだけ回転する場合、関数形式はx '=xcos⁡θ+ysin⁡θ{\ displaystyle x' = x \ cos \ theta + y \ sin \ theta}およびy '= −xsin⁡θ +ycos⁡θ{\ displaystyle y '=-x \ sin \ theta + y \ cos \ theta}。マトリックス形式で書かれているため、次のようになります。

= cos⁡θsin⁡θ−sin⁡θcos⁡θ {\ displaystyle {\ begin {bmatrix} x '\\ y' \ end {bmatrix}} = {\ begin {bmatrix} \ cos \ theta&\ sin \ theta \ \-\ sin \ theta&\ cos \ theta \ end {bmatrix}} {\ begin {bmatrix} x \\ y \ end {bmatrix}}}

同様に、原点を中心に反時計回りに回転する場合、関数形式はx '=xcos⁡θ-ysin⁡θ{\ displaystyle x' = x \ cos \ theta -y \ sin \ theta}およびy '=xsin⁡θ+ ycos⁡θ{\ displaystyle y '= x \ sin \ theta + y \ cos \ theta}行列形式は次のとおりです。

= cos⁡θ−sin⁡θsin⁡θcos⁡θ {\ displaystyle {\ begin {bmatrix} x '\\ y' \ end {bmatrix}} = {\ begin {bmatrix} \ cos \ theta&-\ sin \ theta \\\ sin \ theta&\ cos \ theta \ end {bmatrix}} {\ begin {bmatrix} x \\ y \ end {bmatrix}}}

これらの式は、 x軸が右を指し、 y軸が上を指すことを前提としています。 y軸が下を向いているSVGなどの形式では、これらの行列を交換する必要があります。

剪断

せん断マッピング(傾斜に視覚的に類似)には、2つの可能性があります。

x軸に平行なせん断には、x ′= x + ky {\ displaystyle x' = x + ky}およびy ′= y {\ displaystyle y' = y}があります。マトリックス形式で書かれているため、次のようになります。

= 1k01 {\ displaystyle {\ begin {bmatrix} x '\\ y' \ end {bmatrix}} = {\ begin {bmatrix} 1&k \\ 0&1 \ end {bmatrix}} {\ begin {bmatrix} x \\ y \ end {bmatrix}}}

y軸に平行なせん断には、x '= x {\ displaystyle x' = x}およびy '= y + kx {\ displaystyle y' = y + kx}があり、行列形式です。

= 10k1 {\ displaystyle {\ begin {bmatrix} x '\\ y' \ end {bmatrix}} = {\ begin {bmatrix} 1&0 \\ k&1 \ end {bmatrix}} {\ begin {bmatrix} x \\ y \ end {bmatrix}}}

反射

原点を通る線についての反射については、l→=(lx、ly){\ displaystyle \ scriptstyle {\ vec {l}} =(l_ {x}、l_ {y})}を線の方向。次に、変換行列を使用します。

A =1‖l→‖2{\ displaystyle \ mathbf {A} = {\ frac {1} {\ lVert {\ vec {l}} \ rVert ^ {2}}} {\ begin {bmatrix} l_ {x } ^ {2} -l_ {y} ^ {2}&2l_ {x} l_ {y} \\ 2l_ {x} l_ {y}&l_ {y} ^ {2} -l_ {x} ^ {2} \ end {bmatrix}}}

直交投影

原点を通る直線にベクトルを直交投影するには、u→=(ux、uy){\ displaystyle {\ vec {u}} =(u_ {x}、u_ {y})}を線の方向。次に、変換行列を使用します。

A =1‖u→‖2{\ displaystyle \ mathbf {A} = {\ frac {1} {\ lVert {\ vec {u}} \ rVert ^ {2}}} {\ begin {bmatrix} u_ {x } ^ {2}&u_ {x} u_ {y} \\ u_ {x} u_ {y}&u_ {y} ^ {2} \ end {bmatrix}}}

反射と同様に、原点を通過しない直線への正射影は、線形ではなくアフィン変換です。

平行投影も線形変換であり、単純に行列で表すことができます。ただし、透視投影はそうではなく、これらをマトリックスで表すには、同次座標を使用できます。

3Dコンピュータグラフィックスの例

回転

単位ベクトル( lmn )で定義される任意の軸を中心に角度θを回転させる行列は、

。{\ displaystyle {\ begin {bmatrix} ll(1- \ cos \ theta)+ \ cos \ theta&ml(1- \ cos \ theta)-n \ sin \ theta&nl(1- \ cos \ theta)+ m \ sin \ theta \\ lm(1- \ cos \ theta)+ n \ sin \ theta&mm(1- \ cos \ theta)+ \ cos \ theta&nm(1- \ cos \ theta)-l \ sin \ theta \\ ln(1- \ cos \ theta)-m \ sin \ theta&mn(1- \ cos \ theta)+ l \ sin \ theta&nn(1- \ cos \ theta)+ \ cos \ theta \ end {bmatrix }}。}

反射

平面ax + by + cz = 0 {\ displaystyle ax + by + cz = 0}(原点を通る)を通る点を反映するには、A = I−2NNT {\ displaystyle \ mathbf {A} = \ mathbf {I} -2 \ mathbf {NN} ^ {T}}、ここでI {\ displaystyle \ mathbf {I}}は3x3単位行列で、N {\ displaystyle \ mathbf {N}}は3次元です平面の法線ベクトルの単位ベクトル。 a、b、{\ displaystyle a、b、}およびc {\ displaystyle c}のL2ノルムが1の場合、変換行列は次のように表現できます。

A = {\ displaystyle \ mathbf {A} = {\ begin {bmatrix} 1-2a ^ {2}&-2ab&-2ac \\-2ab&1-2b ^ {2}&-2bc \\-2ac&-2bc&1-2c ^ {2} \ end {bmatrix}}}

これらは、2次元および3次元でのHouseholder反射の特定のケースであることに注意してください。原点を通過しない線または平面に関する反射は、線形変換ではなく、アフィン変換です。4x4アフィン変換行列として、次のように表現できます(法線が単位ベクトルであると仮定します)。

= 1−2a2−2ab−2ac−2ad−2ab1−2b2−2bc−2bd−2ac−2bc1−2c2−2cd0001 {\ displaystyle {\ begin {bmatrix} x '\\ y' \\ z '\\ 1 \ end {bmatrix}} = {\ begin {bmatrix} 1-2a ^ {2}&-2ab&-2ac&-2ad \\-2ab&1-2b ^ {2}&-2bc&-2bd \\-2ac&-2bc&1-2c ^ { 2}&-2cd \\ 0&0&0&1 \ end {bmatrix}} {\ begin {bmatrix} x \\ y \\ z \\ 1 \ end {bmatrix}}}

ここで、d = −p⋅N {\ displaystyle d = \ mathbf {-p} \ cdot \ mathbf {N}}平面上のある点p {\ displaystyle \ mathbf {p}}に対して。

ベクトルの4番目の成分が1ではなく0の場合、ベクトルの方向のみが反映され、その長さは、原点を通る平行平面を介してミラーリングされたかのように変化しません。これは、同じ行列を使用して位置ベクトルと法線ベクトルの両方を変換できるため、便利なプロパティです。詳細については、以下の同次座標とアフィン変換を参照してください。

変換の作成と反転

行列を使用して線形変換を表す主な動機の1つは、変換を簡単に構成して反転できることです。

合成は、行列乗算によって行われます。行ベクトルと列ベクトルは、右側の行と左側の列の行列によって操作されます。テキストは左から右に読み取るため、変換行列を構成する場合は行ベクトルが優先されます。

ABが2つの線形変換の行列の場合、最初にA 、次にBを行ベクトルxに適用する効果は次のようになります。

(x→A)B = x→(AB)。{\ displaystyle({\ vec {x}} \ mathbf {A})\ mathbf {B} = {\ vec {x}}(\ mathbf {AB}) 。}

言い換えると、 B後に続く結合変換Aのマトリックスは、個々のマトリックスの積にすぎません。

Aが正則行列である場合に行列A -1 Aとの組成物は単位行列であるため、Aを 「取り消し」という変換を表すがあります。いくつかの実際のアプリケーションでは、一般的な反転アルゴリズムを使用するか、逆演算(逆方向に回転するなどの明らかな幾何学的解釈を持つ)を実行し、それらを逆順に合成することにより、反転を計算できます。

他の種類の変換

アフィン変換

アフィン変換を行列で表すには、同次座標を使用できます。これは、2つのベクトル( xy )を3つのベクトル( xy 、1)として表現することを意味し、高次元の場合も同様です。このシステムを使用すると、行列乗算で変換を表現できます。関数形式x '= x + tx; y' = y + ty {\ displaystyle x '= x + t_ {x}; y' = y + t_ {y}}は次のようになります。

= 10tx01ty001。{\ displaystyle {\ begin {bmatrix} x '\\ y' \\ 1 \ end {bmatrix}} = {\ begin {bmatrix} 1&0&t_ {x} \\ 0&1&t_ {y} \\ 0&0&1 \ end { bmatrix}} {\ begin {bmatrix} x \\ y \\ 1 \ end {bmatrix}}。}

すべての通常の線形変換はアフィン変換のセットに含まれており、アフィン変換の単純化された形式として説明できます。したがって、線形変換も一般的な変換行列で表すことができます。後者は、対応する線形変換行列を1行と1列だけ拡張し、1に設定する必要がある右下隅を除き、余分なスペースをゼロで埋めることによって取得されます。たとえば、上からの反時計回りの回転行列は:

{\ displaystyle {\ begin {bmatrix} \ cos \ theta&-\ sin \ theta&0 \\\ sin \ theta&\ cos \ theta&0 \\ 0&0&1 \ end {bmatrix}}}

同種の座標を含む変換行列を使用すると、平行移動が線形に独立するため、他のすべてのタイプの変換とシームレスに混在させることができます。その理由は、実平面が実射影空間のw = 1平面にマッピングされるため、実ユークリッド空間の平行移動は実射影空間のせん断として表現できるからです。平行移動は、デカルト座標で表される2次元または3次元のユークリッド空間での非線形変換です(つまり、可換性やその他の特性を保持しながら他の変換と組み合わせることはできません)。同次座標、単純な線形変換(せん断)によって記述されるDまたは4-D射影空間。

2つ以上のアフィン変換の合成により、より多くのアフィン変換を取得できます。たとえば、ベクトル(tx '、ty')、{\ displaystyle(t '_ {x}、t' _ {y})、}の平行移動T 'が与えられた場合、 反時計回りの角度θの回転RSを係数(sx、sy){\ displaystyle(s_ {x}、s_ {y})}でスケーリングし、ベクトルの変換T (tx、ty)、{\ displaystyle(t_ {x}、t_ {y}) 、} T'RSTの結果M次のとおりです。

{\ displaystyle {\ begin {bmatrix} s_ {x} \ cos \ theta&-s_ {y} \ sin \ theta&t_ {x} s_ {x} \ cos \ theta -t_ {y} s_ {y} \ sin \ theta + t '_ {x} \\ s_ {x} \ sin \ theta&s_ {y} \ cos \ theta&t_ {x} s_ {x} \ sin \ theta + t_ {y} s_ {y} \ cos \ theta + t '_ {y} \\ 0&0&1 \ end {bmatrix}}}

アフィン変換を使用する場合、座標ベクトルの同質成分(通常wと呼ばれます)は変更されません。したがって、常に1であると安全に想定して無視できます。ただし、透視投影を使用する場合はそうではありません。

透視投影

3Dコンピュータグラフィックスで重要な別のタイプの変換は、透視投影です。平行投影は、平行線に沿ってポイントを画像平面に投影するために使用されますが、透視投影は、投影の中心と呼ばれる単一の点から発する線に沿ってポイントを画像平面に投影します。つまり、オブジェクトは、投影の中心から遠く離れている場合は投影が小さくなり、近くにある場合は投影が大きくなります(逆関数も参照)。

最も単純な遠近法投影では、原点を投影の中心として使用し、z = 1 {\ displaystyle z = 1}の平面を画像平面として使用します。この変換の関数形式は、x '= x / z {\ displaystyle x' = x / z}です。 y '= y / z {\ displaystyle y' = y / z}。これを同次座標で表すことができます:

= 1000010000100010 {\ displaystyle {\ begin {bmatrix} x_ {c} \\ y_ {c} \\ z_ {c} \\ w_ {c} \ end {bmatrix}} = {\ begin {bmatrix} 1&0&0&0 \\ 0&1&0&0 \\ 0&0&1&0 \\ 0&0&1&0 \ end {bmatrix}} {\ begin {bmatrix} x \\ y \\ z \\ 1 \ end {bmatrix}}}

行列の乗算を実行した後、同質のコンポーネントwc {\ displaystyle w_ {c}}はz {\ displaystyle z}の値と等しくなり、他の3つは変更されません。したがって、実際の平面にマッピングし直すには、各コンポーネントをwc {\ displaystyle w_ {c}}で除算することにより、 同次除算または遠近法除算を実行する必要があります。

= 1wc {\ displaystyle {\ begin {bmatrix} x '\\ y' \\ z '\\ 1 \ end {bmatrix}} = {\ frac {1} {w_ {c}}} {\ begin {bmatrix} x_ {c} \\ y_ {c} \\ z_ {c} \\ w_ {c} \ end {bmatrix}}}

これを回転、スケール、平行移動、せん断と組み合わせて、希望する場所に画像平面と投影の中心を移動させることにより、より複雑な透視投影を構成できます。