行列式(Determinant)と図形の面積・拡大率
「行列式とは何か?」単位正方形の面積拡大率と、符号がマイナスのときの鏡像反転
- 1
- 正方行列 A に対して定義されるスカラー値 det(A)(または |A|)を行列式と呼ぶ
- 2
- 2×2行列の行列式 det(A) = ad - bc の絶対値は、単位正方形 (1×1) が線形変換によって変形された「平行四辺形の面積」そのものを表す
- 3
- 行列式の符号が正(> 0)なら向きを保ち、負(< 0)なら面が裏返った「鏡像反転」を意味し、0 なら次元がペチャンコに潰れて逆行列が存在しない(特異行列)ことを示す
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
連立方程式に唯一の解が存在するか(解けるか解けないか)を係数の組み合わせだけで一発判定するために生まれた。
身につく武器・思考力
行列変換によって図形の面積・体積が何倍に拡大されるかを一目で把握し、符号を見るだけで「裏表が反転したか」を判定できるようになる。
実社会・ITでの活躍現場
- •3DCGにおけるポリゴンの表裏・鏡像反転判定(カリング処理)
- •画像編集ソフト(Photoshop等)の拡大縮小・回転のアフィン変換
- •ロボットの順運動学におけるヤコビ行列式(可操作性の特異点回避)
- •重積分における変数変換の面積拡大係数(ヤコビアン)
Layer 1 — 直感・シミュレーター
2×2行列の各要素 a, b, c, d をスライダーでいじってみよう。右側の座標系で、単位正方形が平行四辺形へとグニャリと変形する様子と、その面積が計算式 と完全一致する様子がリアルタイムに表示される。行列式がマイナスになると面が反転して色が変わるギミックにも注目しよう。
行列 A = [[2, 1], [0, 3]] による線形変換を行うと、元の面積が 5 の図形は変換後に面積いくつになるか?
Layer 2 — 定義・受験・証明
定義
2次の正方行列 に対し、その行列式(Determinant)は以下のように定義される。
3次の正方行列に対しては「サラスの公式(Sarrus' Rule)」により定義される。 幾何学的には、基底ベクトル と が張る平行四辺形の符号付き面積(Signed Area)である。
公式・数理モデル
証明・導出
平行四辺形の外積による面積公式の導出: 原点 を起点とし、2つのベクトル と が張る平行四辺形の面積 を考える。 幾何学的な外積の大きさの定義より、
ここで であるため、 を用いて計算すると、
同類項が消去され、完全平方式が残る:
平方根をとることで、 が厳密に証明される。
押さえておきたいポイント
- のときのみ逆行列 が存在する
- のとき、平面全体が1本の直線または原点1点にペチャンコに潰れて情報が失われる(復元不可能)
- 積の行列式: (2回の変形を行ったときの面積拡大率は、それぞれの拡大率の掛け算になる)
- 3次元空間では、3×3行列式が「平行六面体の体積拡大率」を表す
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
3Dグラフィックスにおける法線ベクトルの反転判定(ポリゴンワインディング判定)
3Dモデルに拡大縮小(スケール)やミラーリング変換(鏡像反転)を適用した際、変換行列の行列式の符号 を調べることで、ポリゴンの頂点順序(時計回り/反時計回り)が裏返っていないかを瞬時に検出し、法線の向きを自動補正する。
1// 2x2 行列式2function det2x2(a: number, b: number, c: number, d: number): number {3 return a * d - b * c;4}56// 3x3 行列式(サラスの公式)7function det3x3(m: number[][]): number {8 return (9 m[0][0] * m[1][1] * m[2][2] +10 m[0][1] * m[1][2] * m[2][0] +11 m[0][2] * m[1][0] * m[2][1] -12 m[0][2] * m[1][1] * m[2][0] -13 m[0][1] * m[1][0] * m[2][2] -14 m[0][0] * m[1][2] * m[2][1]15 );16}1718// 例: X軸反転(鏡像)を伴うスケール変換行列19// X を -1倍, Y を 2倍, Z を 2倍20const scaleMatrix = [21 [-1, 0, 0],22 [0, 2, 0],23 [0, 0, 2],24];2526const det = det3x3(scaleMatrix);27console.log(`体積倍率: ${Math.abs(det)}倍`); // 4倍28console.log(`鏡像反転の有無: ${det < 0 ? "裏返りあり (法線反転が必要)" : "正常"}`);29// 体積倍率: 4倍, 鏡像反転の有無: 裏返りあり (法線反転が必要)
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元