1. 無職の学び舎
  2. >
  3. 無職はゲーム数学の勉強をする
  4. >
  5. ベクトルの正規化

ベクトルの正規化

ベクトルの正規化はベクトルの向きを変えずに大きさ(長さ)を1にすることである。

グラフの右にある[normalize]という所をクリックするとベクトルが正規化される様子が見られると思います。

求め方

ベクトルの正規化は、ベクトルのxy成分をベクトルの長さで割ることで求められる。

ベクトル $\vec{v}(3, 4)$ があるとする。

まず、三平方の定理を使って $\vec{v}$ の長さを求める。

$\vec{v}$の長さ = $\sqrt{v_{x}^2 + v_{y}^2} = \sqrt{ 3^2 + 4^2 } = \sqrt{ 9 + 16 } = \sqrt{ 25 } = 5$

$\vec{v}$ の長さは5だとわかる。

次に、$\vec{v}$ のxy成分を、上で求めた長さで割る

x成分:$3 \div 5 = 0.6$
y成分:$4 \div 5 = 0.8$

$\vec{v}$ を正規化した結果は $(0.6, 0.8)$ になる。

計算式

$\vec{v}(v_{x}, v_{y})$ があり、正規化したベクトルを $\vec{n}(n_{x}, n_{y})$ とすると
$n_{x} = \frac{v_{x}}{|\vec{v}|}$
$n_{y} = \frac{v_{y}} {|\vec{v}|}$

なぜこれで正規化されるのか

正規化の計算はさほど難しくないが、なんでこれでベクトルの長さが1になるのかという部分がモヤっとする。

というわけで自分なりに証明っぽいことをしてみようと思いますが、証明できるほど頭がいいのかというと非常に怪しいですよという事は予め記載しておきたい。

定義的な話

正規化したいベクトルを $\vec{v}$、正規化されたベクトルを$\vec{n}$ とする。

正規化というのは、ざっくり言ってしまえばベクトルを伸び縮みさせて長さを1にするという話である

$\vec{v}$ を $t$ 倍した結果が $\vec{n}$ だと考えると

$\vec{n} = t\vec{v}$
$|\vec{n}| = |t\vec{v}| = 1$

このような関係が成り立つはずである。

$t$は何になるのか

$|t\vec{v}| = 1$ 、この式を展開しながら考えてみる。

$\vec{v}$を$t$倍した結果のベクトルは $t\vec{v} = (tv_{x}, tv_{y})$ になるので

$|t\vec{v}| = 1$
$\sqrt{(tv_{x})^2 + (tv_{y})^2} = 1$
$\sqrt{t^2v_{x}^2 + t^2v_{y}^2} = 1$
$\sqrt{t^2(v_{x}^2 + v_{y}^2)} = 1$
$t\sqrt{v_{x}^2 + v_{y}^2} = 1$
$t = \frac{1}{\sqrt{v_{x}^2 + v_{y}^2}}$

$\sqrt{v_{x}^2 + v_{y}^2}$ は $|\vec{v}|$ と同じ事なので

$t = \frac{1}{|\vec{v}|}$

これを $\vec{n}=t\vec{v}$ の式に代入してみます

$\vec{n}=t\vec{v}=\frac{1}{|\vec{v}|}\vec{v}$

正規化されたベクトル $\vec{n}$ は $\vec{v}$ を $\vec{v}$ の長さで割ったものになりました! ちゃんと証明できた気がします!