[C言語] 三角関数の表を作成する方法
C言語で三角関数の表を作成するには、math.hライブラリを使用します。
このライブラリにはsin、cos、tanなどの関数が含まれており、これらを利用して角度に対する三角関数の値を計算できます。
通常、角度はラジアンで指定されるため、度をラジアンに変換する必要があります。
例えば、forループを使用して0度から360度までの角度に対する三角関数の値を計算し、表形式で出力することが可能です。
この方法により、三角関数の理解を深めるための有用なツールを作成できます。
三角関数の表を作成する手順
表の構造を決める
三角関数の表を作成する際には、まず表の構造を決める必要があります。
一般的には以下のような構造が考えられます。
| 角度 (度) | sin | cos | tan | 
|---|---|---|---|
| 0 | 0 | 1 | 0 | 
| 30 | 0.5 | 0.866 | 0.577 | 
| … | … | … | … | 
この表では、角度を度単位で表示し、それに対応するsin, cos, tanの値を計算して表示します。
角度の範囲とステップの設定
次に、角度の範囲とステップを設定します。
例えば、0度から360度までを10度刻みで計算する場合、以下のように設定します。
- 開始角度: 0度
- 終了角度: 360度
- ステップ: 10度
この設定により、0度、10度、20度、…、360度の各角度に対して三角関数の値を計算します。
sin, cos, tan関数の利用
C言語では、math.hライブラリを使用して三角関数を計算できます。
以下の関数を使用します。
- sin(): サインを計算
- cos(): コサインを計算
- tan(): タンジェントを計算
これらの関数はラジアン単位で角度を受け取るため、度をラジアンに変換する必要があります。
変換には以下の式を使用します。
結果のフォーマットと表示
計算した結果をフォーマットして表示します。
printf関数を使用して、表形式で出力します。
以下はフォーマットの例です。
printf("%3d度: sin = %.3f, cos = %.3f, tan = %.3f\n", degree, sinValue, cosValue, tanValue);この例では、角度を3桁で表示し、sin, cos, tanの値を小数点以下3桁で表示しています。
完成したプログラム
以下に、三角関数の表を作成するC言語のサンプルコードを示します。
#include <stdio.h>
#include <math.h>
int main() {
    int startDegree = 0;
    int endDegree = 360;
    int step = 10;
    double pi = 3.14159265358979323846;
    printf("角度 (度) | sin | cos | tan\n");
    printf("-----------------------------\n");
    for (int degree = startDegree; degree <= endDegree; degree += step) {
        double radian = degree * (pi / 180.0);
        double sinValue = sin(radian);
        double cosValue = cos(radian);
        double tanValue = tan(radian);
        printf("%3d度: sin = %.3f, cos = %.3f, tan = %.3f\n", degree, sinValue, cosValue, tanValue);
    }
    return 0;
}角度 (度) | sin | cos | tan
-----------------------------
  0度: sin = 0.000, cos = 1.000, tan = 0.000
 10度: sin = 0.174, cos = 0.985, tan = 0.176
 20度: sin = 0.342, cos = 0.940, tan = 0.364
...
360度: sin = 0.000, cos = 1.000, tan = 0.000このプログラムは、0度から360度までの各角度に対して、sin, cos, tanの値を計算し、表形式で表示します。
角度は10度刻みで計算され、結果は小数点以下3桁で表示されます。
応用例
三角関数を用いた波形生成
三角関数は波形生成において非常に重要な役割を果たします。
特に、サイン波やコサイン波は音声信号や電気信号の生成に利用されます。
以下に、サイン波を生成するC言語のサンプルコードを示します。
#include <stdio.h>
#include <math.h>
int main() {
    int sampleRate = 44100; // サンプルレート(Hz)
    double frequency = 440.0; // 周波数(Hz)
    int duration = 1; // 持続時間(秒)
    double pi = 3.14159265358979323846;
    for (int i = 0; i < sampleRate * duration; i++) {
        double t = (double)i / sampleRate;
        double sample = sin(2.0 * pi * frequency * t);
        printf("%.3f\n", sample);
    }
    return 0;
}このプログラムは、1秒間の440Hzのサイン波を生成し、各サンプルの値を出力します。
サンプルレートは44.1kHzで設定されています。
グラフ描画ライブラリとの連携
C言語で三角関数を用いたデータを視覚化するには、グラフ描画ライブラリを使用することができます。
例えば、gnuplotやmatplotlib(Pythonを介して)を使用して、計算した三角関数のデータをグラフとして表示することが可能です。
以下は、gnuplotを使用してサイン波を描画する例です。
- C言語でサイン波のデータをファイルに出力します。
- gnuplotスクリプトを作成して、データをプロットします。
#include <stdio.h>
#include <math.h>
int main() {
    FILE *file = fopen("sine_wave.dat", "w");
    if (file == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    int sampleRate = 44100;
    double frequency = 440.0;
    int duration = 1;
    double pi = 3.14159265358979323846;
    for (int i = 0; i < sampleRate * duration; i++) {
        double t = (double)i / sampleRate;
        double sample = sin(2.0 * pi * frequency * t);
        fprintf(file, "%f %f\n", t, sample);
    }
    fclose(file);
    return 0;
}gnuplotスクリプト例:
set title "Sine Wave"
set xlabel "Time (s)"
set ylabel "Amplitude"
plot "sine_wave.dat" using 1:2 with lines title "440Hz Sine Wave"三角関数を用いた物理シミュレーション
三角関数は物理シミュレーションにおいても広く使用されます。
例えば、振り子の運動や波の伝播など、周期的な運動をシミュレートする際に利用されます。
以下は、単純な振り子の運動をシミュレートするC言語の例です。
#include <stdio.h>
#include <math.h>
int main() {
    double length = 1.0; // 振り子の長さ(メートル)
    double g = 9.81; // 重力加速度(m/s^2)
    double theta0 = 0.1; // 初期角度(ラジアン)
    double timeStep = 0.01; // 時間ステップ(秒)
    double pi = 3.14159265358979323846;
    for (double t = 0; t <= 10; t += timeStep) {
        double theta = theta0 * cos(sqrt(g / length) * t);
        printf("時間: %.2f秒, 角度: %.3fラジアン\n", t, theta);
    }
    return 0;
}このプログラムは、単純な振り子の運動をシミュレートし、時間とともに変化する角度を出力します。
振り子の長さと初期角度を設定し、時間ステップごとに角度を計算します。
まとめ
三角関数をC言語で扱う際の基本的な手法と応用例について学びました。
振り返ると、三角関数の表を作成する方法から、波形生成や物理シミュレーションへの応用まで、幅広い活用方法があることがわかります。
この記事を参考に、実際にプログラムを作成し、三角関数の応用を試してみてください。
 
![[C言語] sinとcosを10度刻みで求める方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2797.png)
![[C言語] sinカーブのグラフを描く方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2798.png)
![[C言語] sin関数が使えない原因と対処法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2799.png)
![[C言語] sin関数とasin関数の使い方](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2800.png)
![[C言語] sqrt関数を使うとコンパイルエラーが発生する原因](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2801.png)
![[C言語] sqrt関数が使えない原因とは?](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2802.png)
![[C言語] sqrt関数を自作する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2803.png)
![[C言語] 負数の値からsqrtで平方根を求める方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2805.png)
![[C言語] 三角関数を計算する関数を自作する方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2806.png)
![[C言語] sqrt関数を使って平方根を求める方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2808.png)
![[C言語] sqrt関数を使わずに平方根を求める方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2809.png)
![[C言語] ニュートン法を使って平方根を求める方法](https://af-e.net/wp-content/uploads/2024/08/thumbnail-2810.png)