単位ベクトル(正規化)
記号の意味
- ベクトル- 矢印付きの文字
- 長さ- ベクトルの大きさ
- 単位ベクトル- 長さ1のベクトル
- 内積- 2つのベクトルから数値を計算
- シータ- 角度を表すギリシャ文字
- 余弦- 角度から比率を求める関数
概要
ベクトルの長さを1にして方向情報だけを取り出すことで、どの方向でも一定速度で移動するキャラクター制御を実現する方法を学びます。
単位ベクトルとは
単位ベクトル(unit vector)は、長さが1のベクトルのことです。方向の情報だけを持ち、大きさは常に1です。
任意のベクトルを単位ベクトルに変換する操作を正規化(normalization)と呼びます。各成分を元の長さで割ることで、方向はそのまま、長さだけを1にします。
キャラクターの移動を実装する際、「斜め移動が速くなる」「方向はそのまま、速度だけ変えたい」といった問題に遭遇します。単位ベクトルを使うと、これらの問題を解決できます。
身近な例で考えてみよう
- コンパス: どんな方向を指していても、針の長さは常に同じ
- 方位磁石: 「北の方向」だけを示す(距離は関係ない)
- 単位: 「1メートル」「1秒」のような基準となる長さ
デモ: 単位ベクトルがないと斜め移動が速くなる
単位ベクトルを使わないと、斜め移動が真横移動より速くなってしまいます。デモで確認してみましょう!
単位ベクトルの作り方(正規化)
任意のベクトルを単位ベクトルに変換するには、各成分を元の長さで割ります。この操作を正規化と呼びます。
数式での表現
基本の式:
これを成分ごとに書くと:
計算例:
ベクトル を正規化すると:
単位ベクトルになったか確認:
→ 長さが1になった!これが単位ベクトルです。
パラメータの意味
- : 元のベクトル
- : ベクトルの長さ()
- : 単位ベクトル
- 長さが1(単位長さ)のベクトル
- ハット記号(^)で表記するのが一般的
- 英語: Unit vector または Normalized vector
単位ベクトルの使い方
単位ベクトルは方向のみを表すので、これに速度(スカラー値)を掛けることで、最終的な移動量を決定します。
基本パターン:
実用例
方向を保ったまま長さを1にすることで、速度を一定に保ちながら自由に方向を変えられます。
どんな方向でも同じ速さで移動
JavaScript
方向と速度の独立制御
JavaScript
単位ベクトルの生成
JavaScript
デモ: 様々な方向のベクトルを単位ベクトルに
下のデモで、どんなベクトルも正規化すると長さ1の単位ベクトルになることを確認しましょう!
元のベクトル: (3.0, 4.0)
長さ: 5.00
正規化: (0.60, 0.80)
長さ: 1.00 ≈ 1
計算式: 各成分 ÷ 長さ = (3.0 ÷ 5.00, 4.0 ÷ 5.00)
ゼロベクトルに注意
長さが0のベクトル()は単位ベクトルに変換できません。 実装時は必ず長さチェックを行いましょう。
JavaScript