ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

三角関数テーブルを使って三角関数の演算を行う

SFXTrigonometric クラスは三角関数テーブルを用いて高速に三角関数演算を行うためのクラスです。

最初に、SFXTrigonometric クラスを初期化し、任意の精度の三角関数テーブルを作成します。そして sin, cos, tan などの三角関数演算を行います。

三角関数テーブルの初期化時は精度を上げると初期化に時間がかかります。逆に、精度を下げると初期化は短時間で終わります。

sin, cos, tan の演算時に浮動小数点演算が行われないで、高速な三角関数演算を実現できます。

以下に使用例を示します。

SFXTrigonometric クラスの使用方法
Void SFXMathematicsExplainer::_SFXTrigonometric(Void) const
{
    SFXTrigonometric tri;
    SInt16 i;
    Float64 temp;

    // 三角関数テーブルを初期化する( 時間がかかる処理 )

    if (tri.Initialize() == SFERR_NO_ERROR) {

        for (i = 0; i < 10; ++i) {

            // 三角関数テーブルを使って sin 値を計算する
            // PI : 円周率

            temp = tri.Sin(i * 9 * PI / 180);
            TRACE("%d", static_cast(temp * 10000.0));
        }

        // メモリを明示的に解放する

        tri.Terminate();
    }

    // 三角関数テーブルを分割数を 45 と指定して初期化する方法:
    // ( 分割数を指定しない場合、デフォルトの分割数は 90 )
    // 分割数 90 の場合よりも精度が劣化するが、初期化は高速化する

    if (tri.Initialize(45) == SFERR_NO_ERROR) {

        for (i = 0; i < 10; ++i) {

            // 三角関数テーブルを使って sin 値を計算する
           // PI : 円周率

            temp = tri.Sin(i * 9 * PI / 180);
            TRACE("%d", static_cast(temp * 10000.0));
        }

        // メモリを明示的に解放する

        tri.Terminate();
    }

    // SFXTrigonometric クラスでは、sin 以外に 
    // cos と tan の値が計算可能

    return;
}

参照 SFXTrigonometric::Initialize | SFXTrigonometric::Sin |
SFXTrigonometric::Cos | SFXTrigonometric::Tan |
SFXTrigonometric::Terminate