Pythonで三角関数(sin, cos, tan)を計算する:mathモジュールの使い方とラジアン変換

物理シミュレーション、統計処理、あるいはゲーム開発におけるキャラクターの移動制御など、プログラミングにおいて三角関数(サイン、コサイン、タンジェント)が必要になる場面は多々あります。

Pythonの標準ライブラリ math モジュールを使用すれば、これらの計算を簡単に行うことができます。ただし、引数として渡す角度の単位には注意が必要です。

この記事では、三角関数の基本的な使い方と、度数法(度)と弧度法(ラジアン)の変換方法について解説します。

目次

三角関数の基本関数

math モジュールには、以下の3つの主要な関数が用意されています。

  • math.sin(x): 正弦(サイン)を返します。
  • math.cos(x): 余弦(コサイン)を返します。
  • math.tan(x): 正接(タンジェント)を返します。

【重要】引数は「ラジアン」で指定する

これらの関数に渡す引数 x は、日常的に使う「度(degree, °)」ではなく、**「ラジアン(radian)」**でなければなりません。

  • 180度 = $\pi$ ラジアン
  • 360度 = $2\pi$ ラジアン

もし「30度」や「45度」といった値を使って計算したい場合は、事前にラジアンに変換する必要があります。

度(Degree)とラジアン(Radian)の変換

数式を使って $\times \pi / 180$ と計算することもできますが、math モジュールには変換専用の関数が用意されています。

  • math.radians(度): 度をラジアンに変換します。
  • math.degrees(ラジアン): ラジアンを度に変換します。

実践的なコード例

1. 角度(度)を指定して三角関数を計算する

例として、角度が60度の場合のサイン、コサイン、タンジェントを計算します。

import math

# 角度(度数法)
angle_in_degrees = 60

# 度をラジアンに変換
angle_in_radians = math.radians(angle_in_degrees)

print(f"角度: {angle_in_degrees}度 ({angle_in_radians:.4f} rad)")

# 三角関数の計算
val_sin = math.sin(angle_in_radians)
val_cos = math.cos(angle_in_radians)
val_tan = math.tan(angle_in_radians)

print(f"sin(60°): {val_sin:.4f}")
print(f"cos(60°): {val_cos:.4f}")
print(f"tan(60°): {val_tan:.4f}")

実行結果:

角度: 60度 (1.0472 rad)
sin(60°): 0.8660
cos(60°): 0.5000
tan(60°): 1.7321

$\sin(60^\circ) = \sqrt{3}/2 \approx 0.866$、$\cos(60^\circ) = 1/2 = 0.5$ なので、正しく計算されていることがわかります。

2. 応用:直角三角形の辺の長さを求める

三角関数を使うと、角度と1つの辺の長さから、他の辺の長さを求めることができます。

例:ある地点から木を見上げたときの角度(仰角)が30度で、木までの距離が10メートルの場合、木の高さはいくつか?

(高さ = 距離 $\times \tan(\theta)$)

import math

# 木までの距離 (メートル)
distance = 10.0

# 見上げた角度 (度)
elevation_angle = 30.0

# 角度をラジアンに変換
theta = math.radians(elevation_angle)

# 高さを計算 (tanを使用)
tree_height = distance * math.tan(theta)

print(f"距離: {distance}m, 角度: {elevation_angle}度")
print(f"木の高さ: {tree_height:.2f}m")

実行結果:

距離: 10.0m, 角度: 30.0度
木の高さ: 5.77m

まとめ

  • Pythonで三角関数を使うには import math が必要です。
  • math.sin(), math.cos(), math.tan() を使用します。
  • 引数はラジアンで指定する必要があります。
  • 度数法(度)を使う場合は、math.radians() で変換してから渡します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次