ベクトルの基本演算
ベクトルとは
「地図で「北東に5km進め」というとき、“5km”が大きさで”北東”が向き」——この2つの情報をセットで持つのがベクトルです。「速さ」はスカラー(大きさだけ)ですが、「速度」はベクトル(大きさ + 向き)です。
ベクトルは大きさと向きを持つ量です。スカラー(大きさだけ)とは対照的です。
物理では速度・力・変位などがベクトル量の典型例ですが、数学では純粋に「矢印」として扱います。
表記:(矢印付き)または (太字)
基本演算
ベクトルの加算(平行四辺形の法則)
「風の力と自分が漕ぐ力を合わせると、実際にはどちらに進むか」——これがベクトルの加算です。
の終点に の始点を重ねたときの、 の始点から の終点へのベクトル。
または、平行四辺形を作り、その対角線のベクトル——「二つの矢印で作った平行四辺形の対角線が合力」。
ベクトルの減算
は と同じ大きさで逆向きのベクトル——「引き算は逆向きの矢印を足す」と考えます。
スカラー倍
- :同じ向きで大きさ 倍——「同じ方向に2倍進む」
- :逆向きで大きさ 倍——「逆方向に進む」
- :零ベクトル ——「どこにも動かない」
成分表示(2 次元)
「矢印を横成分と縦成分に分解する」——これで計算がしやすくなります:
ベクトル のとき:
「成分は座標と同じように足し算・かけ算できる」——ピタゴラスの定理で大きさが求まります。
インタラクティブ図解:ベクトルの加算
マウスを動かすとベクトル の終点が変わります。 が平行四辺形の対角線になることを確認しましょう。
var OX = 200, OY = 230, SC = 50;
function arrow(x1, y1, x2, y2, color, width) {
var dx = x2 - x1, dy = y2 - y1;
var len = Math.sqrt(dx*dx + dy*dy);
if (len < 2) return;
var ux = dx/len, uy = dy/len;
var hw = 10, hl = 14;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2 - ux*hl, y2 - uy*hl);
ctx.strokeStyle = color; ctx.lineWidth = width;
ctx.stroke();
ctx.beginPath();
ctx.moveTo(x2, y2);
ctx.lineTo(x2 - ux*hl - uy*hw, y2 - uy*hl + ux*hw);
ctx.lineTo(x2 - ux*hl + uy*hw, y2 - uy*hl - ux*hw);
ctx.closePath();
ctx.fillStyle = color; ctx.fill();
}
function toS(x, y) { return [OX + x*SC, OY - y*SC]; }
function loop() {
ctx.clearRect(0, 0, W, H);
// グリッド
ctx.strokeStyle = '#161b22'; ctx.lineWidth = 1;
for (var gx = -3; gx <= 8; gx++) {
ctx.beginPath(); ctx.moveTo(OX+gx*SC,0); ctx.lineTo(OX+gx*SC,H); ctx.stroke();
}
for (var gy = -4; gy <= 4; gy++) {
ctx.beginPath(); ctx.moveTo(0,OY-gy*SC); ctx.lineTo(W,OY-gy*SC); ctx.stroke();
}
ctx.strokeStyle = '#30363d'; ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(0,OY); ctx.lineTo(W,OY); ctx.stroke();
ctx.beginPath(); ctx.moveTo(OX,0); ctx.lineTo(OX,H); ctx.stroke();
ctx.fillStyle = '#8b949e'; ctx.font = '12px sans-serif';
ctx.fillText('x', W-14, OY-8); ctx.fillText('y', OX+6, 14);
// a = (2, 1.5)(固定)
var ax = 2, ay = 1.5;
// b = マウス位置から
var bx = (mx - OX) / SC;
var by = (OY - my) / SC;
// 合理的な範囲にクランプ
bx = Math.max(-2, Math.min(5, bx));
by = Math.max(-3, Math.min(3.5, by));
// a + b
var sumX = ax + bx, sumY = ay + by;
// 平行四辺形の点線
var aEnd = toS(ax, ay);
var bEnd = toS(bx, by);
var sEnd = toS(sumX, sumY);
ctx.beginPath();
ctx.moveTo(aEnd[0], aEnd[1]);
ctx.lineTo(sEnd[0], sEnd[1]);
ctx.strokeStyle = '#30363d'; ctx.lineWidth = 1; ctx.setLineDash([4,3]);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(bEnd[0], bEnd[1]);
ctx.lineTo(sEnd[0], sEnd[1]);
ctx.stroke(); ctx.setLineDash([]);
// ベクトル a (原点から)
arrow(OX, OY, aEnd[0], aEnd[1], '#58a6ff', 3);
ctx.fillStyle = '#58a6ff'; ctx.font = 'bold 14px serif';
ctx.fillText('a⃗', aEnd[0]+6, aEnd[1]-8);
// ベクトル b (原点から)
arrow(OX, OY, bEnd[0], bEnd[1], '#f0883e', 3);
ctx.fillStyle = '#f0883e'; ctx.font = 'bold 14px serif';
ctx.fillText('b⃗', bEnd[0]+6, bEnd[1]-8);
// a + b
arrow(OX, OY, sEnd[0], sEnd[1], '#56d364', 3);
ctx.fillStyle = '#56d364'; ctx.font = 'bold 14px serif';
ctx.fillText('a⃗+b⃗', sEnd[0]+6, sEnd[1]-8);
// b を a の先端から描く(平行四辺形)
var bfromA = toS(ax + bx, ay + by);
arrow(aEnd[0], aEnd[1], bfromA[0], bfromA[1], '#f0883e60', 2);
// a を b の先端から描く
arrow(bEnd[0], bEnd[1], sEnd[0], sEnd[1], '#58a6ff60', 2);
// 情報パネル
ctx.fillStyle = '#0d1117e0';
ctx.fillRect(8, 8, 240, 120);
ctx.strokeStyle = '#30363d'; ctx.lineWidth = 1;
ctx.strokeRect(8, 8, 240, 120);
ctx.font = '13px monospace';
ctx.fillStyle = '#58a6ff';
ctx.fillText('a⃗ = (' + ax.toFixed(1) + ', ' + ay.toFixed(1) + ')', 16, 30);
ctx.fillText('|a⃗| = ' + Math.sqrt(ax*ax+ay*ay).toFixed(2), 16, 48);
ctx.fillStyle = '#f0883e';
ctx.fillText('b⃗ = (' + bx.toFixed(2) + ', ' + by.toFixed(2) + ')', 16, 68);
ctx.fillText('|b⃗| = ' + Math.sqrt(bx*bx+by*by).toFixed(2), 16, 86);
ctx.fillStyle = '#56d364';
ctx.fillText('a⃗+b⃗ = (' + sumX.toFixed(2) + ', ' + sumY.toFixed(2) + ')', 16, 106);
ctx.fillText('|a⃗+b⃗| = ' + Math.sqrt(sumX*sumX+sumY*sumY).toFixed(2), 16, 124);
requestAnimationFrame(loop);
}
loop();
位置ベクトル
「地図上の場所を原点からの矢印で表す」——これが位置ベクトルです。
点 A, B の位置ベクトル(原点 O からのベクトル)を , とすると:
「AB ベクトル = B の位置 - A の位置」と覚えましょう——「Bに行くにはAまで戻ってから(-a)Bに進む(+b)」という考え方です。
分点の公式
「AからBへの道を m:n に分ける点はどこか」——重みつき平均で求めます:
線分 AB を に内分する点 P の位置ベクトル:
特に中点()——「等分なら単純平均」:
外分( として扱う):
ベクトルの性質
交換律・結合律
分配律(スカラー倍)
平行条件
(、) となる実数 が存在する——「同じ方向を向いているか逆方向かは、一方がもう一方の定数倍かどうかで分かる」。
ベクトルの共線条件
3 点 A, B, C が一直線上にある となる実数 が存在する
または成分で表すと、、 のとき:
(これは行列式 = 0 の条件とも一致します)
具体例:重心の位置ベクトル
「三角形の3本の中線の交点」が重心——各頂点から対辺の中点を結ぶ線が交わる点です:
三角形 ABC の重心 G は、3 頂点の位置ベクトルの平均:
これは「各中線を 2:1 に内分する点」という幾何的性質から導けます——「3頂点の座標の平均が重心」という覚え方でもOKです。
まとめ
- ベクトル = 大きさ + 向き——「スカラーに方向を加えたもの」
- 成分表示 で計算できる——「座標と同じように足し算・かけ算」
- 加算:成分ごとに足す。幾何的には平行四辺形の法則——「対角線が合力」
- スカラー倍:成分に実数をかける(向きが変わることも)
- 位置ベクトルで分点公式を使うと、座標計算がスマートになる——「ABベクトル = B - A」
次回はベクトルの「内積」——2 つのベクトルの「揃い具合」を数値化する操作を学びます。