三角関数を使いこなそう
プログラマ向けの内容です。
三角関数で何が出来るかというのを覚えておくと、中身を知らなくとも怖くありません。
ぜひ使いこなしていきましょう。ここでは2次元での内容となります。3次元も応用として可能です。
三角関数で何が出来るか?
①原点(0,0)を中心とした座標の回転
※ベクトルの回転と言い換えてもよいでしょう。
②2点間の角度を知る
※ベクトルの角度を取得すると言い換えてもよいでしょう。
前提知識
三角関数では、角度を取り扱うのですが弧度法(ラジアン)というものを使います。
我々の馴染みがあるのは、度数法と呼ばれるもので、何度(°)というやつです。
度数法でいいよー。弧度法(ラジアン)なんて興味ないよーと思われた方は
私もそうです。興味無いです…
なぜ使わなければならないかと言えば、世の中に用意されている数学系の
ライブラリがラジアンしか受け付けてくれないのです(涙)
仕方ないので、覚えてしまいましょう。
度数法の範囲
0°~ 360°
弧度法の範囲
0.0 ~ 2PI
※PI=円周率
はい、これだけです。
なので、変換する場合は簡単に出来ます。
1° = 0.01745329251994329576923690768489 rad
※rad = ラジアン
度(°) → ラジアン
degree × 0.01745329251994329576923690768489
※degreeが入力の角度
ラジアン → 度(°)
rad ÷ 0.01745329251994329576923690768489
※radが入力のラジアン角
変換するラッパー関数などを作成して、上手く付き合っていきましょう。
では、ここから本題です。
①原点(0,0)を中心とした座標の回転の方法
どんなプログラミング言語でも、サインとコサインを計算する関数があるので探してみましょう。
大抵は、sin, cosという名前です。
回転するには、下記の式に当てはめるだけです。
x' = x * cos(角度) - y * sin(角度)
y' = x * sin(角度) + y * cos(角度)
回転前(x,y) → 回転後(x', y')
※注意点
・原点(0,0)を基準に回転したものです。
原点以外の回転を行いたい場合は、原点にずらして回転させた後に元の座標に反映させる必要があります。
・角度の指定はラジアンです。
・sinとcosは角度が同じであれば結果は同じなので、1度計算しておけば良いです。
②2点間の角度を知る方法
どんなプログラミング言語でも、アークタンジェントを計算する関数があるので探してみましょう。
大抵は、atan2という名前です。atanというものもありますが、こちらの場合
第一象限(0°~90°)しか計算できないので、必ず2の方を使ってください。
使い方
atan2( 点2.y - 点1.y, 点2.x - 点1.x )
これで点1, 点2のラジアン角を知ることが出来ます。
第一引数に何でyなんやって私も思いましたがこの順番になっています。
数学的な意味が何かあるんでしょう。(知らんけど)
※注意点
・単位はラジアンで返る。
・値の範囲は -PI ~ PI、弧度法で言えば-180°~180°です。
0~360°を期待する場合は、変換が必要になります。
これで回転できたり、角度は取得できるようになりましたね。
ベクトルを混ぜると内積・外積の話が続きにあり、応用編として記事を書きたいと思います。
それでは良い三角関数ライフを!