#06 ふれてみよう高校数学 関数
加法定理
加法定理とは
「30°のsinとcosはわかる。45°もわかる。じゃあ75°は?」——30°+45°だから、もし「足した角度のsin」を「それぞれのsin・cosで表せたら」便利ですよね。
でも、 とはなりません。試しに数値を入れると左辺は なのに、右辺は で全然違います。
足した角度の三角関数は、単純な足し算では求められない——それを正しく計算するのが加法定理です。
差の公式は を に置き換えることで得られます(、 を使うだけ):
インタラクティブデモ:加法定理の幾何学的証明
単位円上で角度 と を視覚化します。マウスを左右に動かすと が変わり、 は固定です。右パネルで「」と「」が一致しているのを確認してください——公式が正しいことが数値でわかります。
マウスを左右に動かすと α が変わります(β = 45°固定)
function loop() {
ctx.clearRect(0, 0, W, H);
var cx = W / 2 - 40, cy = H / 2 + 20;
var r = 130;
var alpha = (mx / W) * Math.PI * 1.5;
var beta = Math.PI / 4;
var total = alpha + beta;
var cosA = Math.cos(alpha), sinA = Math.sin(alpha);
var cosB = Math.cos(beta), sinB = Math.sin(beta);
var cosAB = Math.cos(total), sinAB = Math.sin(total);
// Unit circle
ctx.strokeStyle = 'rgba(255,255,255,0.2)';
ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.arc(cx, cy, r, 0, Math.PI * 2); ctx.stroke();
// Axes
ctx.strokeStyle = 'rgba(255,255,255,0.3)';
ctx.lineWidth = 1.5;
ctx.beginPath(); ctx.moveTo(cx - 160, cy); ctx.lineTo(cx + 160, cy); ctx.stroke();
ctx.beginPath(); ctx.moveTo(cx, cy - 160); ctx.lineTo(cx, cy + 160); ctx.stroke();
// Arc for alpha (yellow)
ctx.strokeStyle = 'rgba(255,235,59,0.7)';
ctx.lineWidth = 2;
ctx.beginPath(); ctx.arc(cx, cy, 25, 0, -alpha, alpha < 0); ctx.stroke();
ctx.fillStyle = '#ffeb3b';
ctx.font = '13px sans-serif';
ctx.fillText('α', cx + 28, cy - 8);
// Arc for beta (orange, from alpha to alpha+beta)
ctx.strokeStyle = 'rgba(255,152,0,0.7)';
ctx.lineWidth = 2;
ctx.beginPath(); ctx.arc(cx, cy, 40, -alpha, -total, total < alpha); ctx.stroke();
ctx.fillStyle = '#ffa726';
ctx.fillText('β', cx + 42, cy - 22);
// Arc for alpha+beta (green, full)
ctx.strokeStyle = 'rgba(102,187,106,0.4)';
ctx.lineWidth = 1.5;
ctx.setLineDash([5,3]);
ctx.beginPath(); ctx.arc(cx, cy, 55, 0, -total, total < 0); ctx.stroke();
ctx.setLineDash([]);
ctx.fillStyle = '#66bb6a';
ctx.fillText('α+β', cx + 58, cy - 28);
// Point at alpha (yellow)
var pAx = cx + r * cosA, pAy = cy - r * sinA;
ctx.strokeStyle = '#ffeb3b';
ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(cx, cy); ctx.lineTo(pAx, pAy); ctx.stroke();
ctx.fillStyle = '#ffeb3b';
ctx.beginPath(); ctx.arc(pAx, pAy, 5, 0, Math.PI * 2); ctx.fill();
// Point at beta from alpha (orange)
var pBx = cx + r * Math.cos(beta), pBy = cy - r * Math.sin(beta);
ctx.strokeStyle = '#ffa726';
ctx.lineWidth = 2;
ctx.setLineDash([4,3]);
ctx.beginPath(); ctx.moveTo(cx, cy); ctx.lineTo(pBx, pBy); ctx.stroke();
ctx.setLineDash([]);
// Point at alpha+beta (green, bright)
var pABx = cx + r * cosAB, pABy = cy - r * sinAB;
ctx.strokeStyle = '#66bb6a';
ctx.lineWidth = 2.5;
ctx.beginPath(); ctx.moveTo(cx, cy); ctx.lineTo(pABx, pABy); ctx.stroke();
ctx.fillStyle = '#66bb6a';
ctx.beginPath(); ctx.arc(pABx, pABy, 6, 0, Math.PI * 2); ctx.fill();
// sin(alpha+beta) vertical projection
ctx.strokeStyle = 'rgba(239,83,80,0.7)';
ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(pABx, cy); ctx.lineTo(pABx, pABy); ctx.stroke();
ctx.fillStyle = '#ef5350';
ctx.font = '12px sans-serif';
ctx.fillText('sin(α+β)', pABx + 6, (cy + pABy) / 2);
// cos(alpha+beta) horizontal projection
ctx.strokeStyle = 'rgba(79,195,247,0.7)';
ctx.lineWidth = 2;
ctx.beginPath(); ctx.moveTo(cx, pABy); ctx.lineTo(pABx, pABy); ctx.stroke();
ctx.fillStyle = '#4fc3f7';
ctx.fillText('cos(α+β)', cx + 4, pABy - 6);
// Info panel
ctx.fillStyle = 'rgba(0,0,0,0.7)';
ctx.beginPath(); ctx.roundRect(W - 220, 10, 208, 130, 8); ctx.fill();
ctx.fillStyle = '#ffeb3b';
ctx.font = 'bold 13px monospace';
var aDeg = (alpha * 180 / Math.PI).toFixed(0);
var bDeg = (beta * 180 / Math.PI).toFixed(0);
ctx.fillText('α = ' + aDeg + '°, β = ' + bDeg + '°', W - 210, 34);
ctx.fillStyle = '#66bb6a';
ctx.font = '12px monospace';
ctx.fillText('sin(α+β) = ' + sinAB.toFixed(3), W - 210, 56);
ctx.fillStyle = 'rgba(255,255,255,0.7)';
var rhs = sinA * cosB + cosA * sinB;
ctx.fillText('sinα·cosβ', W - 210, 74);
ctx.fillText('+ cosα·sinβ = ' + rhs.toFixed(3), W - 210, 90);
ctx.fillStyle = '#4fc3f7';
ctx.fillText('cos(α+β) = ' + cosAB.toFixed(3), W - 210, 110);
var rhsC = cosA * cosB - sinA * sinB;
ctx.fillStyle = 'rgba(255,255,255,0.7)';
ctx.fillText('= ' + rhsC.toFixed(3) + ' ✓', W - 210, 128);
requestAnimationFrame(loop);
}
loop(); 加法定理の証明のアイデア
「本当にこの公式が正しいの?」という疑問への答えを、単位円を使って証明できます——ピタゴラスの定理(直角三角形での三平方)と余弦定理を組み合わせるだけです。
単位円上に2点 、 をとります。
一方、余弦定理から なので:
これを基に から加法定理が導けます。「長さを2通りの方法で計算して一致させる」——数学でよく使われる証明のテクニックです。
加法定理の応用
例① を求める
「75°は特殊角の表にないけど、45°+30°なら計算できる!」——加法定理の最も使いやすい応用です。
例② を求める
( であることとも一致します——「余角の関係」です)
の加法定理の導出
tanの加法定理は、sinとcosの加法定理から導けます——「別に覚えなくても導ける」式です:
分子分母を で割ると(それぞれの項を で割る):
練習問題
- 、、 のとき を求めよ( は鋭角)。
- を加法定理で求めよ。
- を加法定理で変形せよ。
解答
- より →
まとめ
| 公式 | 内容 |
|---|---|
加法定理は「三角関数の計算の核心」——この一つを覚えると、次に学ぶ倍角・半角公式もすべて導けるようになります。
次回は倍角公式と半角公式を学びます。加法定理で とおくだけで、2倍角の公式が自動的に出てきます。