前のページ次のページ上に戻るホーム SophiaFramework 2.2
SFUTrigonometric
三角関数テーブルにより三角関数を計算するクラスです。
#include <SFUTrigonometric.hpp>
class SFUTrigonometric;
typedef SFUTrigonometric&          SFUTrigonometricRef;
typedef SFUTrigonometric*          SFUTrigonometricPtr;
typedef SFUTrigonometric**         SFUTrigonometricHandle;
typedef const SFUTrigonometric     ConstSFUTrigonometric;
typedef const SFUTrigonometric&    ConstSFUTrigonometricRef;
typedef const SFUTrigonometric*    ConstSFUTrigonometricPtr;
typedef const SFUTrigonometric**   ConstSFUTrigonometricHandle;

解説

SFUTrigonometric は、三角関数テーブルを作成し、 テーブル ルックアップによる高速な三角関数の計算を行います。

ラジアンの区間 [0, PI/2] (ここで PI は円周率とします) を等分割した値に対して、そのコサイン値のテーブルを作成し、 そのテーブルから、 あらゆるラジアンに対するコサイン値、サイン値、タンジェント値を計算して返します。

SFUDouble クラスの SFUDouble::CosSFUDouble::SinSFUDouble::Tan 関数の計算処理には時間がかかりますので、 三角関数の計算が必要な場合、 毎回これらの関数を呼び出すのではなく、 SFUTrigonometric クラスによりテーブルを作成した上で、 三角関数の値をルックアップするほうが高速になります。

ラジアンの区間 [0, PI/2] をいくつに分割してテーブルを作成するかは、 Initialize 関数により指定します。 分割数を増やすと計算の精度はよくなりますが、 テーブルに保持する値が増加しますので、 ヒープ メモリを多く消費することになります。 ヒープの使用量は、分割数 N に対して、N * 8 バイトとなります。

使用例

下記のコードでは、 三角関数テーブルを分割数 180 で作成した上で、 いくつかの三角関数の値を計算しています。

SFUDouble x, y;
SFUDouble e = 1.0e-10;  // 漸近精度
SFUDouble pi =" SFUDouble::Pi();  // 円周率

SFUTrigonometric tri;
tri.Initialize(180, e);  // 三角関数テーブルを初期化

x = tri.Cos(pi / 3);
y = tri.Sin(pi / 3);

参照

SFUDouble

メンバ

コンストラクタ/デストラクタ
public
SFUTrigonometric SFUTrigonometric クラスのコンストラクタです。
public
~SFUTrigonometric SFUTrigonometric クラスのデストラクタです。
パブリック関数
public
Cos コサイン値を返します。
public
Initialize 三角関数テーブルを作成します。
public
Sin サイン値を返します。
public
Tan タンジェント値を返します。

SFUTrigonometric::SFUTrigonometric
SFUTrigonometric クラスのコンストラクタです。
[ public ]
SFUTrigonometric(Void);

解説

初期化を行います。 コンストラクタでは三角関数テーブルは生成されません。 三角関数テーブルを作成するためには、 Initialize を呼び出してください。

参照

SFUTrigonometric::Initialize


SFUTrigonometric::~SFUTrigonometric
SFUTrigonometric クラスのデストラクタです。
[ public ]
~SFUTrigonometric(Void);

解説

破棄処理を行います。 三角関数テーブルが使用していたヒープは解放されます。


SFUTrigonometric::Cos
コサイン値を返します。
[ public ]
SFUDouble Cos(
    ConstSFUDoubleRef radian   // ラジアン
);

SFUTrigonometric::Initialize
三角関数テーブルを作成します。
[ public ]
Bool Initialize(
    SInt16 division = 90                                  // 区間 [0, 2*PI] の分割数
    ConstSFUDoubleRef precision = SFUDouble::MinValue()   // 漸近精度
);

引数

division

ラジアンの区間 [0, 2*PI] を分割する数を指定します。 この数を大きくすると計算精度がよくなりますが、 より多くのヒープ メモリが必要となります。

precision

テーブルの初期化時に SFUDouble::Cos 関数を呼び出してあらかじめ計算を行いますが、 そのときの漸近精度を指定します。

戻り値

成功すると TRUE を返します。 引数が不正な値である、ヒープ メモリの割り当てに失敗した、 などの理由でテーブルの作成に失敗した場合は、 FALSE を返します。

使用例

この関数は通常、コンストラクタの直後に呼び出します。

SFUTrigonometric tri;
tri.Initialize(45, 1.0e-20);

SFUTrigonometric::Sin
サイン値を返します。
[ public ]
SFUDouble Sin(
    ConstSFUDoubleRef radian   // ラジアン
);

SFUTrigonometric::Tan
タンジェント値を返します。
[ public ]
SFUDouble Tan(
    ConstSFUDoubleRef radian   // ラジアン
);

戻り値

この関数は、三角関数テーブルからサイン値とコサイン値を計算した上で、 それらを除算して返します。 コサイン値が 0 である場合や、除算結果がオーバーフローする場合の戻り値は未定義です。