![]() ![]() ![]()
|
SophiaFramework 2.2 |
#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::Cos、 SFUDouble::Sin、 SFUDouble::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);
| コンストラクタ/デストラクタ | ||
|---|---|---|
| public |
SFUTrigonometric | SFUTrigonometric クラスのコンストラクタです。 |
| public |
~SFUTrigonometric | SFUTrigonometric クラスのデストラクタです。 |
| パブリック関数 | ||
|---|---|---|
| public |
Cos | コサイン値を返します。 |
| public |
Initialize | 三角関数テーブルを作成します。 |
| public |
Sin | サイン値を返します。 |
| public |
Tan | タンジェント値を返します。 |
[ public ] SFUTrigonometric(Void);
初期化を行います。 コンストラクタでは三角関数テーブルは生成されません。 三角関数テーブルを作成するためには、 Initialize を呼び出してください。
[ public ] ~SFUTrigonometric(Void);
破棄処理を行います。 三角関数テーブルが使用していたヒープは解放されます。
[ public ] SFUDouble Cos( ConstSFUDoubleRef radian // ラジアン );
[ public ] Bool Initialize( SInt16 division = 90 // 区間 [0, 2*PI] の分割数 ConstSFUDoubleRef precision = SFUDouble::MinValue() // 漸近精度 );
ラジアンの区間 [0, 2*PI] を分割する数を指定します。 この数を大きくすると計算精度がよくなりますが、 より多くのヒープ メモリが必要となります。
テーブルの初期化時に SFUDouble::Cos 関数を呼び出してあらかじめ計算を行いますが、 そのときの漸近精度を指定します。
成功すると TRUE を返します。 引数が不正な値である、ヒープ メモリの割り当てに失敗した、 などの理由でテーブルの作成に失敗した場合は、 FALSE を返します。
この関数は通常、コンストラクタの直後に呼び出します。
SFUTrigonometric tri; tri.Initialize(45, 1.0e-20);
[ public ] SFUDouble Sin( ConstSFUDoubleRef radian // ラジアン );
[ public ] SFUDouble Tan( ConstSFUDoubleRef radian // ラジアン );
この関数は、三角関数テーブルからサイン値とコサイン値を計算した上で、 それらを除算して返します。 コサイン値が 0 である場合や、除算結果がオーバーフローする場合の戻り値は未定義です。
| Copyright(C) 2003-2004 Sophia Cradle Inc., All Rights Reserved. |
![]() ![]() ![]()
|