Math World Lab

ベクトルの内積

2本の矢印の「向きの近さ」を1つの数値にする

この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
2本のベクトルの「向きの揃い具合」を1つの数値に変換する演算である。
2
2本のベクトルが垂直(90°)に交わるとき、内積はちょうど 0 になる。
3
ゲーム制作での敵の視界判定(FOV)や、AIのレコメンド(コサイン類似度)の中核技術。

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

2つのベクトルが「どれくらい同じ方向を向いているか」を、角度を測らずに掛け算と足し算だけで超高速に計算するために考案された。

身につく武器・思考力

多次元のデータ同士の類似度を一瞬で割り出し、影の長さや仕事量を瞬時に導く線形代数の最重要直感が手に入る。

実社会・ITでの活躍現場

  • •ChatGPTやAI検索における文章同士の意味の近さ(コサイン類似度)
  • •3Dゲームにおける敵の視野角判定(プレイヤーが視界内にいるか)
  • •CGにおけるポリゴンの陰影計算(面と光の角度による明るさ)
  • •物理学における力学の「仕事(W = F · s)」の計算

Layer 1 — 直感・シミュレーター

上のシミュレーターで青と赤の矢印の先端をドラッグしてみよう。2本が同じ方向を向くほど内積は大きくなり、直角(90°)でちょうど0になり、反対方向を向くと負になる。まずは数式抜きで、この「向きの近さのメーター」としての感覚をつかもう。

a⃗\vec{a} = (3.00, 1.00) — 大きさ 3.16
b⃗\vec{b} = (1.00, 2.00) — 大きさ 2.24
a⃗⋅b⃗\vec{a} \cdot \vec{b} = 5.00
cos⁡θ\cos\theta = 0.71(θ ≈ 45.0°)

↑ 矢印の先端をドラッグして、2本のベクトルの向きと大きさを自由に変えてみよう。内積の値と、なす角の関係を確認できる。

直感チェック!ミニクイズ

2つのベクトル a=(1, 0) と b=(0, 1) の内積の値は何になるでしょう?

Layer 2 — 定義・受験・証明

定義

2つのベクトル a⃗,b⃗\vec{a}, \vec{b} の内積(ドット積)は、成分計算では次のように定義される。

a⃗⋅b⃗=axbx+ayby\vec{a} \cdot \vec{b} = a_x b_x + a_y b_y

これは幾何的には、なす角 θ\theta を使って次のようにも表せる。

a⃗⋅b⃗=∣a⃗∣∣b⃗∣cos⁡θ\vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}|\cos\theta

この2つの式が一致することが、内積の最も重要な性質である。

公式・数理モデル

a⃗⋅b⃗=∣a⃗∣∣b⃗∣cos⁡θ=axbx+ayby\vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}|\cos\theta = a_x b_x + a_y b_y

証明・導出

余弦定理を使うと成分表示と幾何表示が一致することを示せる。a⃗,b⃗\vec{a}, \vec{b} の始点をそろえたとき、終点間の距離を c=a⃗−b⃗c = \vec{a} - \vec{b} とすると余弦定理より

∣c⃗∣2=∣a⃗∣2+∣b⃗∣2−2∣a⃗∣∣b⃗∣cos⁡θ|\vec{c}|^2 = |\vec{a}|^2 + |\vec{b}|^2 - 2|\vec{a}||\vec{b}|\cos\theta

一方で成分計算からも ∣c⃗∣2=∣a⃗∣2+∣b⃗∣2−2(axbx+ayby)|\vec{c}|^2 = |\vec{a}|^2 + |\vec{b}|^2 - 2(a_x b_x + a_y b_y) が導けるため、両辺を比較すると

∣a⃗∣∣b⃗∣cos⁡θ=axbx+ayby|\vec{a}||\vec{b}|\cos\theta = a_x b_x + a_y b_y

が得られ、幾何表示と成分表示が一致することが証明される。

押さえておきたいポイント

  • 内積が正 → 2つのベクトルは90°未満(似た方向)を向いている
  • 内積が0 → 2つのベクトルは直交している(垂直)
  • 内積が負 → 2つのベクトルは90°より開いた方向を向いている
  • cos⁡θ=a⃗⋅b⃗∣a⃗∣∣b⃗∣\cos\theta = \dfrac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|} より、内積からなす角を逆算できる
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

ゲーム制作の視野角判定 (FOV: Field of View)

敵キャラクターが「プレイヤーが自分の視野角の中に入っているか」を判定する処理は、内積を使うと数行で書ける。敵の向きベクトルとプレイヤーへの方向ベクトルの内積からなす角の余弦を求め、視野角の半分の余弦と比較するだけでよい。平方根や三角関数を使わずに高速に判定できるのが実務上のポイント。

1type Vec2 = { x: number; y: number };
2
3function normalize(v: Vec2): Vec2 {
4 const len = Math.hypot(v.x, v.y) || 1;
5 return { x: v.x / len, y: v.y / len };
6}
7
8function dot(a: Vec2, b: Vec2): number {
9 return a.x * b.x + a.y * b.y;
10}
11
12/**
13 * 敵の視野角(fovDegrees, 全体角度)の中にターゲットが入っているか判定する。
14 * 平方根や atan2 を避け、cos の比較だけで済ませるのがポイント。
15 */
16function isInFieldOfView(
17 enemyPos: Vec2,
18 enemyFacing: Vec2, // 正規化済みの向きベクトル
19 targetPos: Vec2,
20 fovDegrees: number,
21): boolean {
22 const toTarget = normalize({
23 x: targetPos.x - enemyPos.x,
24 y: targetPos.y - enemyPos.y,
25 });
26
27 const cosTheta = dot(enemyFacing, toTarget);
28 const cosHalfFov = Math.cos((fovDegrees / 2) * (Math.PI / 180));
29
30 // cosThetaが大きいほど「正面に近い」。しきい値以上ならFOV内。
31 return cosTheta >= cosHalfFov;
32}
33
34// 使用例: 敵は右(1,0)向き、視野角90度
35const enemy = { x: 0, y: 0 };
36const facing: Vec2 = { x: 1, y: 0 };
37const player = { x: 5, y: 3 };
38
39console.log(isInFieldOfView(enemy, facing, player, 90)); // true / false

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

関連度高大学数学

固有値・固有ベクトル

行列で変換しても「向きが変わらない」特別な方向

関連度高高校数学

正弦定理と余弦定理(三角測量)

直接行けない遠方の山や島までの距離を「角度」から精密に測る測量・GPSの基礎数学

関連度高高校数学

3D空間ベクトルと外積(クロス積)

3次元空間におけるポリゴンの表裏・法線ベクトルと3DCGライティングの数理

同じレベルで次に挑戦したいトピック

同レベル推薦高校数学

三角関数(単位円とサイン・コサイン)

回転する点のx座標・y座標が三角関数の正体

同レベル推薦高校数学

微分の基本(接線と変化率)

平均変化率の極限として現れる「その瞬間の傾き」

同レベル推薦高校数学

積分の基本(面積と区分求積法)

微小な短冊を無限に足し合わせることで現れる「曲線下の面積」

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

円の面積と円周率

半径を変えると、円周と面積はどう変わる?

工学・実践連携小学校・算数

三角形・多角形の面積

頂点を動かして、面積の公式が成り立つ理由を確かめよう

工学・実践連携小学校・算数

単位変換(長さ・面積・体積)

長さが2倍になると、面積・体積は何倍になる?

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。