😸

三角関数とC++

2020/11/06に公開

AtCoderでときどき三角関数を使うことがあるのでC++での使い方をまとめておく。

以下の三角形を考える。

r1, r2の単位はラジアン。0 \leq r1,r2 \leq \frac{\pi}{2}とする。

ラジアンと度数の関係は以下。

1 [rad] = \frac{180^\circ}{\pi}
2 \pi [rad] = 360^\circ

各種定義

\sin(r1) = \frac{b}{c}
\cos(r1) = \frac{a}{c}
\tan(r1) = \frac{b}{a}

上記の\sin\cos\tanの逆関数はそれぞれ以下で定義できる。ここから辺の長さはわかっているが角度がわからない時に以下で求められる。

r1 = \arcsin(\frac{b}{c})
r1 = \arccos(\frac{a}{c})
r1 = \arctan(\frac{b}{a})

上記よりr2は以下のように求められる。

r2 = \pi - \arcsin(\frac{b}{c})
r2 = \pi - \arccos(\frac{a}{c})
r2 = \pi - \arctan(\frac{b}{a})

r1を度数に直したいときは以下で求められる。

r1 \times \frac{180}{\pi}

実装

\piは以下で定義されている。

#include <bits/stdc++.h>
M_PI

\sin, \cos, \tanはそのまま使える。rの単位はラジアン。

sin(r)
cos(r)
tan(r)

\arcsin, \arccos, \arctanは以下で使える。

asin(b/c)
acos(a/c)
atan(b/a)

\arctanabを使って以下のようにも求められる。

atan2(b, a)

三角関数を使う問題

参考

Discussion