[C言語] 三角関数の表を作成する方法

C言語で三角関数の表を作成するには、math.hライブラリを使用します。

このライブラリにはsincostanなどの関数が含まれており、これらを利用して角度に対する三角関数の値を計算できます。

通常、角度はラジアンで指定されるため、度をラジアンに変換する必要があります。

例えば、forループを使用して0度から360度までの角度に対する三角関数の値を計算し、表形式で出力することが可能です。

この方法により、三角関数の理解を深めるための有用なツールを作成できます。

この記事でわかること
  • 三角関数の表を作成する手順
  • C言語でのsin, cos, tan関数の利用方法
  • 波形生成やグラフ描画への応用例
  • 三角関数を用いた物理シミュレーションの実例

目次から探す

三角関数の表を作成する手順

表の構造を決める

三角関数の表を作成する際には、まず表の構造を決める必要があります。

一般的には以下のような構造が考えられます。

スクロールできます
角度 (度)sincostan
0010
300.50.8660.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の値を計算し、表形式で表示します。

tan90は未定義なので、異常値を出力します。必要に応じて出力を変更するといいでしょう。

角度は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言語で三角関数を用いたデータを視覚化するには、グラフ描画ライブラリを使用することができます。

例えば、gnuplotmatplotlib(Pythonを介して)を使用して、計算した三角関数のデータをグラフとして表示することが可能です。

以下は、gnuplotを使用してサイン波を描画する例です。

  1. C言語でサイン波のデータをファイルに出力します。
  2. 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言語で三角関数を使用する際、角度はラジアン単位で指定する必要があります。

度をラジアンに変換するには、以下の式を使用します。

  • ラジアン = 度 × (π / 180)

例:double radian = degree * (3.14159265358979323846 / 180.0);

この変換を行うことで、sin()cos()などの関数に正しい値を渡すことができます。

tan関数でエラーが出るのはなぜ?

tan()関数を使用する際、特定の角度でエラーが発生することがあります。

これは、タンジェントが無限大になる角度(90度、270度など)で計算を行おうとした場合に起こります。

これらの角度では、タンジェントの値が定義されていないため、計算結果が不定になります。

この問題を回避するには、計算前に角度をチェックし、無限大になる角度を避けるようにすることが重要です。

三角関数の精度を上げる方法はある?

三角関数の計算精度を上げるためには、以下の方法を考慮することができます。

  1. 倍精度浮動小数点数の使用: double型を使用することで、float型よりも高い精度で計算できます。
  2. ライブラリの選択: 標準ライブラリのmath.hを使用する場合、精度は十分ですが、さらに高精度が必要な場合は、他の数学ライブラリを検討することもできます。
  3. 計算の工夫: 角度の変換や計算の順序を工夫することで、誤差を最小限に抑えることができます。

まとめ

三角関数をC言語で扱う際の基本的な手法と応用例について学びました。

振り返ると、三角関数の表を作成する方法から、波形生成や物理シミュレーションへの応用まで、幅広い活用方法があることがわかります。

この記事を参考に、実際にプログラムを作成し、三角関数の応用を試してみてください。

  • URLをコピーしました!
目次から探す