2次元ベクトル 計算ツール|内積・大きさ・成分・角度
2次元ベクトルの内積・外積・大きさ・なす角・正規化・和差を一括計算する無料電卓。 物理・線形代数の基本演算に加え、機械学習のコサイン類似度・ゲームプログラミングの当たり判定にも応用できます。
ベクトル計算機
ベクトル A
ベクトル B
ベクトル演算の基本式
大きさ |A| = √(Ax² + Ay²)
内積 A·B = Ax×Bx + Ay×By = |A||B|cosθ
外積(z成分)= Ax×By − Ay×Bx = |A||B|sinθ
なす角 cosθ = (A·B) / (|A| × |B|)
正規化 Â = A / |A|(単位ベクトル・長さ1)
和 A+B = (Ax+Bx, Ay+By)
差 A-B = (Ax-Bx, Ay-By)
距離 d(A,B) = |A-B| = √((Ax-Bx)² + (Ay-By)²)
ベクトルの応用分野
物理
- 力・速度・加速度の合成(分解)
- 運動量・仕事・エネルギーの計算
- 電場・磁場のベクトル場
- ローレンツ力(外積で表現)
ゲームプログラミング
- キャラクター移動・回転(方向ベクトル)
- 当たり判定(距離・法線)
- 視線判定(内積で正面/背面)
- 反射(法線ベクトルを使った跳ね返り)
機械学習・データサイエンス
- コサイン類似度(文書・画像の類似度)
- Embedding空間の距離計算
- PCA・主成分分析の固有ベクトル
- ニューラルネットワークの重み行列
3DCG・グラフィックス
- 法線ベクトル(面の向き・光の計算)
- 反射・屈折の計算
- カメラの視線ベクトル
- ノーマルマッピング
内積の意味と符号
内積 A·B の符号から、2ベクトルの向きの関係が読み取れます:
- A·B > 0:鋭角(同じ方向寄り、0°〜90°)
- A·B = 0:直交(90°、内積の最大の応用ポイント)
- A·B < 0:鈍角(逆方向寄り、90°〜180°)
- A·B = |A||B|:完全に同じ向き(0°、平行)
- A·B = -|A||B|:完全に逆向き(180°、反平行)
ゲームでの応用例:視界判定
「プレイヤーが敵の視界に入っているか」を判定するには、 敵の視線ベクトル V と敵→プレイヤーのベクトル P を正規化してから内積を取ります。 内積 > cos(視野角/2) なら視界内。 これはドット積1つの計算で済むため、当たり判定より効率的です。
外積の意味(2Dでは擬似スカラー)
2次元ベクトルの外積は「z成分」だけを出力するため、実質的には擬似スカラーです:
- A×B > 0:BはAの反時計回り方向
- A×B = 0:平行(同方向または逆方向)
- A×B < 0:BはAの時計回り方向
- |A×B|:AとBが張る平行四辺形の面積
応用:点の左右判定
直線AB上を点Cが左右どちら側にあるかは、 ベクトル AB と ベクトル AC の外積の符号で判定できます。 ゲームAIの経路計算・図形処理で頻出のテクニックです。
ケーススタディ:具体的な計算例
ケース1:A=(3,4), B=(2,1)
- |A| = √(9+16) = 5
- |B| = √(4+1) ≈ 2.236
- A·B = 3×2 + 4×1 = 10
- A×B = 3×1 − 4×2 = −5(BはAの時計回り側)
- なす角 cosθ = 10 / (5×2.236) ≈ 0.894 → θ ≈ 26.57°
ケース2:垂直な例 A=(1,0), B=(0,1)
- A·B = 0(直交確認)
- A×B = 1(反時計回り90°)
- なす角 = 90°
ケース3:平行な例 A=(2,3), B=(4,6)
- A·B = 8 + 18 = 26
- A×B = 12 − 12 = 0(平行確認)
- |A||B| = √13 × 2√13 = 26(内積と一致→完全平行)
ケース4:反対向き A=(1,0), B=(-2,0)
- A·B = -2
- |A||B| = 2、内積の絶対値と一致
- なす角 = 180°
ベクトルの学習ロードマップ
高校数学(数B・数III)
- ベクトルの定義・成分表示
- 内積・角度
- ベクトル方程式(直線・円)
- 空間ベクトル(3次元への拡張)
大学初年度(線形代数)
- ベクトル空間の公理
- 基底・次元
- 行列との対応
- 固有値・固有ベクトル
応用分野(工学・情報)
- 物理シミュレーション
- コンピュータグラフィックス
- 信号処理・フーリエ変換
- 機械学習・深層学習
ベクトル計算でハマりやすい落とし穴
1. 内積の順番
ベクトルの内積は可換(A·B = B·A)ですが、 コード上では変数名の入れ違いでバグが発生することがあります。 数式では同じですが、計算式のトレースで意識しましょう。
2. 外積の符号
2D外積は「反時計回りが正」の右手系が標準ですが、 コンピュータグラフィックスではY軸が下向きのため符号が反転する場合があります。 座標系を必ず確認してください。
3. ゼロベクトルの正規化
|A|=0のベクトルは方向を持たないため正規化できません(ゼロ除算エラー)。 本ツールでは「—」を表示していますが、コード実装時は必ずゼロチェックを入れましょう。
4. 角度が180°を超えるケース
arccos関数は0°〜180°しか返しません。 「時計回りに270°」のような向きは、外積の符号を併用して判定します。 atan2関数を使えば -180°〜180° の範囲で厳密な向きが得られます。
5. 浮動小数点誤差
「直交」「平行」の判定は完全一致では無理で、 閾値(例:0.0001)を設けます。本ツールでは0.0001未満を等しいとみなしています。
よくある質問(FAQ)
内積と外積、どちらを使うべき?
角度・方向の一致度を知りたいなら内積、回転方向・面積を知りたいなら外積。両方使うことも多いです。
3次元ベクトルとの違いは?
3次元では外積がベクトル(3成分)になります。2次元は擬似スカラー(1成分)で、計算が簡単です。
ベクトルの正規化はなぜ必要?
方向だけを扱いたい時に長さを1に統一するため。ゲームの向き・機械学習の類似度計算で頻出です。
コサイン類似度と内積の違いは?
コサイン類似度 = 正規化された内積。ベクトルの長さの影響を除いて方向のみで類似度を計算します。
ラジアンと度の変換は?
本ツールは度(degree)で表示しています。ラジアンに変換するには度×π/180、逆はラジアン×180/π。
ベクトルは高校数学のどこで習う?
現行の学習指導要領では数学B・数学Cで扱います。線形代数の入り口として大学初年度でも重要な単元です。
プログラミング言語別の実装例
JavaScript
const dot = (a,b) => a.x*b.x + a.y*b.y;
const mag = a => Math.hypot(a.x, a.y);
const norm = a => { const m = mag(a); return {x:a.x/m, y:a.y/m}; };
const angle = (a,b) => Math.acos(dot(a,b)/(mag(a)*mag(b))) * 180 / Math.PI;
Python (NumPy)
import numpy as np a = np.array([3, 4]) b = np.array([2, 1]) dot = np.dot(a, b) mag_a = np.linalg.norm(a) angle = np.degrees(np.arccos(dot / (mag_a * np.linalg.norm(b))))
C++(3D数学ライブラリ)
// glm を使う場合 glm::vec2 a(3.0f, 4.0f); glm::vec2 b(2.0f, 1.0f); float d = glm::dot(a, b); float ma = glm::length(a);
各言語ともに組み込み関数・ライブラリを使うと数値誤差が抑えられます。 `Math.hypot`は`Math.sqrt(x*x+y*y)`と比べてオーバーフローに強く、推奨されます。
参考リンク(公的機関・学習リソース)
免責事項
本ツールは学習・確認用の計算補助を目的としており、 試験・研究・実務での使用は最終的にご自身の判断でご確認ください。 丸め誤差は表示上4桁で四捨五入していますが、内部計算はIEEE 754浮動小数点で行われます。 極端に大きい/小さい値では誤差が拡大することがあります。 本ツールの計算結果に基づく損害について、当サイトは一切の責任を負いません。