三角比の定義——辺の比を角度で表す
三角比とは何か
たとえば、建物の高さを測りたいとします。建物の根元から10メートル離れた場所に立って、てっぺんを見上げると角度が30°だったとします。このとき建物の高さは何メートルでしょうか?
直接測るのは大変ですが、三角比という道具を使えば計算できます。
「角度から辺の比を取り出す道具」——それが三角比の本質です。
直角三角形を思い浮かべてください。角度 θ が決まれば、三角形の大きさに関係なく辺の比は常に一定になります。小さな三角形でも大きな三角形でも、同じ角度なら同じ比になります。この「比の一定性」を関数として名前をつけたのが sin(サイン)、cos(コサイン)、tan(タンジェント)です。
定義:直角三角形から
角 θ に注目した直角三角形で、
- 対辺(opposite):θ の向かい側の辺
- 隣辺(adjacent):θ に隣接する辺(斜辺でないほう)
- 斜辺(hypotenuse):直角の向かい側の辺(最も長い)
とすると、三角比の定義は次のとおりです。
冒頭の建物の例で言うと、 なので、高さ で求められます。
覚え方のヒント
「SOH-CAH-TOA」という英語の語呂合わせが世界的に有名ですが、日本語なら
正弦(せいげん)= sin、余弦(よげん)= cos、正接(せいせつ)= tan
と漢字名も合わせて覚えると、後々の公式との結びつきがスムーズになります。
インタラクティブ図解①:角度 θ を動かす
マウスを左右に動かすと角度 θ が変わります。三辺の比と数値がリアルタイムに更新されるので、角度と比の関係を体感してください。θ が大きくなると「対辺(緑)」が伸び、「隣辺(紫)」が縮まるのが確認できます。
var cx = 300, cy = 200;
var r = 140;
function loop() {
ctx.clearRect(0, 0, W, H);
// θ: 5° to 85° mapped from mouse x
var theta = 5 + (mx / W) * 80;
var rad = theta * Math.PI / 180;
var ax = cx, ay = cy;
var bx = cx + r * Math.cos(rad), by = cy - r * Math.sin(rad);
var cx2 = cx + r * Math.cos(rad), cy2 = cy;
// 直角マーク
ctx.strokeStyle = '#555';
ctx.lineWidth = 1;
ctx.strokeRect(cx2 - 10, cy2 - 10, 10, 10);
// 三角形
ctx.beginPath();
ctx.moveTo(ax, ay);
ctx.lineTo(bx, by);
ctx.lineTo(cx2, cy2);
ctx.closePath();
ctx.strokeStyle = '#58a6ff';
ctx.lineWidth = 2.5;
ctx.stroke();
// 斜辺ハイライト
ctx.beginPath();
ctx.moveTo(ax, ay);
ctx.lineTo(bx, by);
ctx.strokeStyle = '#f0883e';
ctx.lineWidth = 3;
ctx.stroke();
// 対辺ハイライト
ctx.beginPath();
ctx.moveTo(bx, by);
ctx.lineTo(cx2, cy2);
ctx.strokeStyle = '#56d364';
ctx.lineWidth = 3;
ctx.stroke();
// 隣辺ハイライト
ctx.beginPath();
ctx.moveTo(ax, ay);
ctx.lineTo(cx2, cy2);
ctx.strokeStyle = '#bc8cff';
ctx.lineWidth = 3;
ctx.stroke();
// 角度弧
ctx.beginPath();
ctx.arc(ax, ay, 28, -rad, 0);
ctx.strokeStyle = '#ffa657';
ctx.lineWidth = 2;
ctx.stroke();
// θ ラベル
ctx.fillStyle = '#ffa657';
ctx.font = 'bold 16px serif';
ctx.fillText('θ = ' + theta.toFixed(1) + '°', ax + 35, ay - 6);
// 辺ラベル
ctx.font = '13px sans-serif';
// 斜辺
var mx2 = (ax + bx) / 2, my2 = (ay + by) / 2;
ctx.fillStyle = '#f0883e';
ctx.fillText('斜辺', mx2 - 40, my2);
// 対辺
ctx.fillStyle = '#56d364';
ctx.fillText('対辺', cx2 + 6, (by + cy2) / 2);
// 隣辺
ctx.fillStyle = '#bc8cff';
ctx.fillText('隣辺', (ax + cx2) / 2 - 10, cy2 + 18);
// 値表示
var sinV = Math.sin(rad).toFixed(3);
var cosV = Math.cos(rad).toFixed(3);
var tanV = Math.tan(rad).toFixed(3);
ctx.fillStyle = '#e6edf3';
ctx.font = 'bold 14px monospace';
ctx.fillText('sin θ = ' + sinV, 20, 30);
ctx.fillText('cos θ = ' + cosV, 20, 52);
ctx.fillText('tan θ = ' + tanV, 20, 74);
// sin² + cos² = 1 確認
var check = (Math.pow(Math.sin(rad),2) + Math.pow(Math.cos(rad),2)).toFixed(4);
ctx.fillStyle = '#79c0ff';
ctx.font = '12px monospace';
ctx.fillText('sin²θ + cos²θ = ' + check, 20, 100);
requestAnimationFrame(loop);
}
loop();
重要な恒等式
三角比の定義から、次の基本恒等式が直接導けます。
これは直角三角形でピタゴラスの定理 を両辺を で割ったものに他なりません。「対辺の2乗 ÷ 斜辺の2乗」+「隣辺の2乗 ÷ 斜辺の2乗」は必ず1になります。
この二つだけで、多くの三角関数の計算が進められます。
特別な角度の三角比
日常でよく登場する角度の値は暗記しておくと便利です。
| θ | sin θ | cos θ | tan θ |
|---|---|---|---|
| 0° | 0 | 1 | 0 |
| 30° | 1/2 | √3/2 | 1/√3 |
| 45° | 1/√2 | 1/√2 | 1 |
| 60° | √3/2 | 1/2 | √3 |
| 90° | 1 | 0 | 未定義 |
30°-60°-90° の三角形は辺の比が 1 : √3 : 2、45°-45°-90° は 1 : 1 : √2 です。
覚え方:sin は「0°から90°にかけて0から1へ増える」、cos は「0°から90°にかけて1から0へ減る」と押さえると、表を丸暗記しなくても推測できます。
インタラクティブ図解②:単位円と三角比
単位円(半径 1 の円)の上で θ を動かすと、cos θ が x 座標、sin θ が y 座標になることが視覚的にわかります。点 P が円の上を動くとき、その x 座標が cos θ、y 座標が sin θです。
var cx = 200, cy = 170, r = 130;
function loop() {
ctx.clearRect(0, 0, W, H);
var theta = ((mx / W) * 360) * Math.PI / 180;
// 軸
ctx.strokeStyle = '#30363d';
ctx.lineWidth = 1;
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();
// 単位円
ctx.beginPath();
ctx.arc(cx, cy, r, 0, Math.PI * 2);
ctx.strokeStyle = '#30363d';
ctx.lineWidth = 1.5;
ctx.stroke();
var px = cx + r * Math.cos(theta);
var py = cy - r * Math.sin(theta);
// cos: x軸への投影
ctx.beginPath();
ctx.moveTo(cx, cy);
ctx.lineTo(px, cy);
ctx.strokeStyle = '#bc8cff';
ctx.lineWidth = 3;
ctx.stroke();
// sin: y軸への投影
ctx.beginPath();
ctx.moveTo(px, cy);
ctx.lineTo(px, py);
ctx.strokeStyle = '#56d364';
ctx.lineWidth = 3;
ctx.stroke();
// 半径
ctx.beginPath();
ctx.moveTo(cx, cy);
ctx.lineTo(px, py);
ctx.strokeStyle = '#f0883e';
ctx.lineWidth = 2.5;
ctx.stroke();
// 角度弧
ctx.beginPath();
ctx.arc(cx, cy, 22, -theta, 0);
ctx.strokeStyle = '#ffa657';
ctx.lineWidth = 2;
ctx.stroke();
// 点 P
ctx.beginPath();
ctx.arc(px, py, 6, 0, Math.PI * 2);
ctx.fillStyle = '#f0883e';
ctx.fill();
// ラベル
ctx.font = '13px sans-serif';
ctx.fillStyle = '#bc8cff';
ctx.fillText('cos θ', cx + (px - cx)/2 - 18, cy + 18);
ctx.fillStyle = '#56d364';
ctx.fillText('sin θ', px + 6, cy - (cy - py)/2);
// 軸ラベル
ctx.fillStyle = '#8b949e';
ctx.font = '13px sans-serif';
ctx.fillText('x', cx + 155, cy - 6);
ctx.fillText('y', cx + 6, cy - 150);
ctx.fillText('1', cx + r - 8, cy + 16);
ctx.fillText('-1', cx - r - 18, cy + 16);
// 数値
var deg = (theta * 180 / Math.PI);
deg = ((deg % 360) + 360) % 360;
ctx.fillStyle = '#e6edf3';
ctx.font = 'bold 14px monospace';
ctx.fillText('θ = ' + deg.toFixed(1) + '°', W - 220, 30);
ctx.fillStyle = '#bc8cff';
ctx.fillText('cos θ = ' + Math.cos(theta).toFixed(3), W - 220, 54);
ctx.fillStyle = '#56d364';
ctx.fillText('sin θ = ' + Math.sin(theta).toFixed(3), W - 220, 78);
requestAnimationFrame(loop);
}
loop();
単位円が教えてくれること
単位円を使うと、0°〜360° のすべての角度で三角比が定義できます。直角三角形では90°を超える角度は扱えませんでしたが、単位円を使うと:
- 0°〜90°(第1象限):sin > 0、cos > 0(両方プラス)
- 90° < θ < 180°(第2象限):sin > 0、cos < 0(sinだけプラス)
- 180° < θ < 270°(第3象限):sin < 0、cos < 0(両方マイナス)
- 270° < θ < 360°(第4象限):sin < 0、cos > 0(cosだけプラス)
三角比は直角三角形を飛び出して、あらゆる角度に拡張できるのです。これが後に学ぶ三角関数(サイン波・コサイン波)への入り口になります。
まとめ
- sin・cos・tan は「角度が決まれば辺の比が決まる」という直角三角形の性質を数値化したもの
- 、、
- 基本恒等式 はピタゴラスの定理そのもの
- 単位円では cos θ が x 座標、sin θ が y 座標になる——これで360°全てに拡張できる
- 特別角(30°・45°・60°)の値はよく出るので覚えておくと便利
次回は三角比を使って「高さと距離を求める」実用的な問題に挑戦します。