三角関数(さんかくかんすう、Trigonometric Function)とは、角度と辺の長さの関係を表す数学の関数のことです。サイン、コサイン、タンジェントの三つが基本で、プログラミングの世界では画面の描画や音の合成など、意外なほど身近な場面で使われています。
現実世界に例えると、三角関数は時計の針の位置を数字に直す道具のようなものです。何時何分かという角度の情報から、針の先が右にどれだけ、上にどれだけ離れているかを教えてくれます。角度と座標を行き来させる働きを持っています。
三角関数 図解
基本となる三つの関数
| 名前 | 表すもの | プログラムでの書き方 |
|---|---|---|
| サイン | 縦方向の位置の割合 | Math.sin |
| コサイン | 横方向の位置の割合 | Math.cos |
| タンジェント | 傾きの度合い | Math.tan |
| アークタンジェント | 座標から角度を逆算 | Math.atan2 |
角度から座標を求める
もっともよく使う形がこれです。中心から一定の距離だけ離れた点が、角度に応じてどの位置に来るかを、コサインで横、サインで縦として計算できます。円形に並ぶメニューや、時計の針、レーダーの走査線といった表示は、この計算をそのまま画面の座標へ当てはめて描かれています。
ラジアンという単位
最初につまずきやすい点です。プログラミング言語の三角関数は、ほとんどが「度」ではなく「ラジアン」という単位で角度を受け取ります。180度が円周率と同じ値にあたり、度からラジアンへ直すには円周率を掛けて180で割ります。ここを忘れると、意図とまったく違う結果が返ってきます。
波を作る道具でもある
角度を少しずつ増やしながらサインの値を並べると、上下に滑らかに揺れる波の形が現れます。この性質は、音の合成や、点滅をやわらかく変化させるアニメーションに使われています。明るさや大きさをサインの値に合わせて変えると、機械的でない自然な動きが表現できます。
ゲームやグラフィックスで欠かせない
画面上の物を回転させる処理は、三角関数の組み合わせでできています。キャラクターの向きを変える、砲弾を角度どおりに飛ばす、カメラを回り込ませる、といった動きはすべてこの計算に支えられています。3Dでは行列の中に組み込まれ、まとめて扱われる形が一般的です。
二点の間の角度を知りたいとき
逆向きの計算も必要になります。マウスの位置に向かってキャラクターを向かせるような処理では、横と縦の差から角度を求めるアークタンジェントを使います。多くの言語では引数を二つ取る形のものが用意されており、こちらは向きの区別まで正しく求められるため実用的です。
通信や測位の裏側でも働く
表示だけの話ではありません。電波や音声を扱う信号処理では、複雑な波を単純な波の重ね合わせとして分解する考え方が使われ、その土台に三角関数があります。音声の圧縮、画像の圧縮、位置測定の計算など、日常的に使う技術の奥で静かに働いています。
計算の誤差に注意する
実装のうえでの落とし穴です。コンピューターの小数は近似値のため、本来ゼロになるはずの値がごくわずかな端数として残ることがあります。値がぴったり一致するかどうかで判定すると、思わぬ動作になります。ある程度の幅を持たせて比べるようにしておくと安全です。



コメント