English
PROGRAMMER'S GUIDE数学計算ライブラリ
戻る|   ■
数学計算ライブラリ

2.3 関数仕様


<三角関数>




Title

関数仕様

Function

sin関数

Function Name

MTH_Sin

No

1

 書 式
Fixed32 val = MTH_Sin(Fixed32 degree)
 入 力
degree:−180.0から180.0までの角度
 出 力
なし
 関数値
val:sin値
 機 能
指定角度の sin値を返します。



Title

関数仕様

Function

cos関数

Function Name

MTH_Cos

No

2

 書 式
Fixed32 val = MTH_Cos(Fixed32 degree)
 入 力
degree:−180.0から180.0までの角度
 出 力
なし
 関数値
val:cos値
 機 能
指定角度の cos値を返します。



Title

関数仕様

Function

atan関数

Function Name

MTH_Atan

No

3

 書 式
Fixed32 degree = MTH_Atan(Fixed32 y, Fixed32 x)
 入 力
y:−1.0から1.0までの高さ
x:−1.0から1.0までの底辺
 出 力
なし
 関数値
degree:−180.0から180.0までの角度
 機 能
指定x, y値からatan値を返します。

<3Dマトリックス演算処理>




Title

関数仕様

Function

マトリックステーブルの初期化

Function Name

MTH_InitialMatrix

No

4

 書 式
void MTH_InitialMatrix(MthMatrixTbl *matrixTbl, Uint16 stackSize,MthMatrix *matrix)
 入 力
matrixTbl
:マトリックステーブル
stackSize
:マトリックススタックの最大エントリ数
matrix   
:マトリックススタックエリア
 出 力
matrixTbl:マトリックステーブル
 関数値
なし
 機 能
マトリックステーブルを初期化します。



Title

関数仕様

Function

カレントマトリックスのクリア

Function Name

MTH_ClearMatrix

No

5

 書 式
void MTH_ClearMatrix(MthMatrixTbl *matrixTbl)
 入 力
matrixTbl:マトリックステーブル
 出 力
なし
 関数値
なし
 機 能
マトリックススタック内のカレントマトリックスを単位行列にクリアします。



Title

関数仕様

Function

マトリックスのプッシュ

Function Name

MTH_PushMatrix

No

6

 書 式
void MTH_PushMatrix(MthMatrixTbl *matrixTbl)
 入 力
matrixTbl:マトリックステーブル
 出 力
なし
 関数値
なし
 機 能
カレントマトリックスをプッシュします。



Title

関数仕様

Function

マトリックスのポップ

Function Name

MTH_PopMatrix

No

7

 書 式
void MTH_PopMatrix(MthMatrixTbl *matrixTbl)
 入 力
matrixTbl:マトリックステーブル
 出 力
なし
 関数値
なし
 機 能
カレントマトリックスをポップします。



Title

関数仕様

Function

マトリックス合成・平行移動

Function Name

MTH_MoveMatrix

No

8

 書 式
void MTH_MoveMatrix(MthMatrixTbl *matrixTbl,Fixed32 x, Fixed32 y, Fixed32 z)
 入 力
matrixTbl
:マトリックステーブル
x
:X方向の移動量
y
:Y方向の移動量
z
:Z方向の移動量
 出 力
なし
 関数値
なし
 機 能
カレントマトリックスに対しXYZ平行移動のマトリックス合成を行います。



Title

関数仕様

Function

マトリックス合成・X軸回転

Function Name

MTH_RotateMatrixX

No

9

 書 式
void MTH_RotateMatrixX(MthMatrixTbl *matrixTbl, Fixed32 xDegree)
 入 力
matrixTbl
:マトリックステーブル
xDegree  
:X軸の回転角度(-180 から 180 の範囲)
 出 力
なし
 関数値
なし
 機 能
カレントマトリックスに対しX軸回転のマトリックス合成を行います。



Title

関数仕様

Function

マトリックス合成・Y軸回転

Function Name

MTH_RotateMatrixY

No

10

 書 式
void MTH_RotateMatrixY(MthMatrixTbl *matrixTbl, Fixed32 yDegree)
 入 力
matrixTbl
:マトリックステーブル
yDegree  
:Y軸の回転角度(-180 から 180 の範囲)
 出 力
なし
 関数値
なし
 機 能
カレントマトリックスに対しY軸回転のマトリックス合成を行います。



Title

関数仕様

Function

マトリックス合成・Z軸回転

Function Name

MTH_RotateMatrixZ

No

11

 書 式
void MTH_RotateMatrixZ(MthMatrixTbl *matrixTbl, Fixed32 zDegree)
 入 力
matrixTbl
:マトリックステーブル
zDegree  
:Z軸の回転角度(−180から180の範囲)
 出 力
なし
 関数値
なし
 機 能
カレントマトリックスに対しZ軸回転のマトリックス合成を行います。



Title

関数仕様

Function

マトリックス合成・Z軸符号反転

Function Name

MTH_ReverseZ

No

12

 書 式
void MTH_ReverseZ(MthMatrixTbl *matrixTbl)
 入 力
matrixTbl:マトリックステーブル
 出 力
なし
 関数値
なし
 機 能
カレントマトリックスに対しZ軸符号反転のマトリックス合成を行います。



Title

関数仕様

Function

マトリックス演算・乗算

Function Name

MTH_MulMatrix

No

13

 書 式
void MTH_MulMatrix(MthMatrix *a, MthMatrix *b, MthMatrix *c)
 入 力
a  
:被乗数マトリックス
b  
:乗数マトリックス
 出 力
c:乗算結果マトリックス
 関数値
なし
 機 能
マトリックス a 、b を掛けて c に出力します。



Title

関数仕様

Function

マトリックス演算・頂点の座標変換

Function Name

MTH_CordTrans

No

14

 書 式
void MTH_CoordTrans(MthMatrix *matrix, MthXyz *src, MthXyz *ans)
 入 力
matrix
:変換マトリックス
src   
:変換前頂点座標
 出 力
ans :変換後頂点座標
 関数値
なし
 機 能
頂点座標を変換マトリックスにて座標変換します。



Title

関数仕様

Function

マトリックス演算・法線ベクトルの
座標変換

Function Name

MTH_NormalTrans

No

15

 書 式
void MTH_NormalTrans(MthMatrix *matrix, MthXyz *src, MthXyz *ans)
 入 力
matrix
:変換マトリック
src   
:変換前法線ベクトル
 出 力
ans :変換後法線ベクトル
 関数値
なし
 機 能
法線ベクトルを変換マトリックスにて座標変換します。


<DSPによる3Dポリゴンデータ座標変換処理>




Title

関数仕様

Function

座標変換処理の初期化

Function Name

MTH_PolyDataTransInit

No

16

 書 式
void MTH_PolyDataTransInit(void)
 入 力
なし
 出 力
なし
 関数値
なし
 機 能
DSPの初期化と座標変換処理プログラムをロードします。



Title

関数仕様

Function

3Dポリゴンデータの座標変換

Function Name

MTH_PolyDataTransExec

No

17

 書 式
void MTH_PolyDataTransExec(MthPolyTransParm *polyTransParm)
 入 力
polyTransParm:座標変換パラメータテーブル
 出 力
polyTransParm:座標変換パラメータテーブルの以下のエリアが出力となります。
surfBright
 ポリゴン面の輝度計算結果
transViewVertAns
 視点座標変換後頂点データ
vertBright
 頂点の輝度計算結果
transWorldVertAns
 ワールド座標変換後頂点データ
 関数値
なし
 機 能
3Dスプライト表示ライブラリで用いているポリゴンデータ列(3Dオブジェクト)について次の一連の処理をDSPにて行います。
・ポリゴン面の隠面判定と輝度計算
−関連パラメータ項目−
<入力> surfCount            ポリゴン面数
     surfPoint            面輝度計算用ポリゴン面の代表点テーブル
     surfNormal           ポリゴン面の法線テーブル
     matrix               視点座標系への変換マトリックス
     lightVector          視点座標系内での光源ベクトル
<出力> surfBright           ポリゴン面の輝度計算結果テーブル
         bit31                                 bit0
           o... .... .... .... .... .... ...o oooo 
           |                                | ||||
           |                                +-++++----輝度 
           |                                          0x00:最も暗い
           |                                          0x1f:最も明るい
           +--------- 1:隠 面
                      0:表示面
・頂点の視点座標系への変換処理
−関連パラメータ項目−
<入力> transViewVertCount   視点座標変換の頂点エントリ数
     transViewVertSrc     視点座標変換前頂点データテーブル
     viewMatrix           視点座標系への変換マトリックス
<出力> transViewVertAns     視点座標変換後頂点データテーブル
・グーロー表示用頂点の輝度計算(オプション)
−関連パラメータ項目−
<入力> gourVertCount        頂点輝度計算の頂点エントリ数
                          =0の場合頂点の輝度計算は行わない
     vertNormal           頂点輝度計算用頂点の法線テーブル
     matrix               視点座標系への変換マトリックス
     lightVector          視点座標系内での光源ベクトル
<出力> vertBright           頂点の輝度計算結果テーブル
                          0x00 = 最も暗い
                          0x1f = 最も明るい
・頂点のワールド座標系への変換処理
−関連パラメータ項目−
<入力> transWorldVertCount  ワールド座標変換の頂点エントリ数
                          =0の場合、頂点のワールド座標系の変換は行わない
     transWorldVertSrc    ワールド座標変換前頂点データテーブル
     worldMatrix          ワールド座標系への変換マトリックス
<出力> transWorldVertAns    ワールド座標変換後頂点データテーブル



Title

関数仕様

Function

座標変換処理の完了チェック

Function Name

MTH_PolyDataTransCheck

No

18

 書 式
voidMTH_PolyDataTransCheck(void)
 入 力
なし
 出 力
なし
 関数値
なし
 機 能
DSPによる座標変換処理が完了するまで待ちます。


<透視変換処理>




Title

関数仕様

Function

3Dポイントの透視変換

Function Name

MTH_Pers2D

No

19

 書 式
voidMTH_Pers2D(MthXyz *p3d, MthXy *unitPixel, XyInt *p2d)
 入 力
p3d      
:視点座標系3D頂点座標
unitPixel
:スクリーンXYの単位ピクセル数
 出 力
p2d :透視変換後スクリーン2D座標
 関数値
なし
 機 能
視点座標系の原点を視点として −1.0のところにスクリーンを設定して3Dから2Dへの透視変換を行います。スクリーン上で1.0の大きさがスクリーンXYの単位ピクセル 数に対応します。


<乱数生成処理>




Title

関数仕様

Function

乱数生成の初期化

Function Name

MTH_InitialRand

No

20

 書 式
void MTH_InitialRand(Uint32 initVal)
 入 力
initVal:乱数発生の初期パラメータ値
 出 力
なし
 関数値
なし
 機 能
MTH_GetRand で返す乱数の演算用初期パラメータを設定します。本初期化ルーチンを呼び出さないと乱数演算用初期パラメータ値は0となっています。



Title

関数仕様

Function

乱数値を返す

Function Name

MTH_GetRand

No

21

 書 式
Uint32 randVal = MTH_GetRand(void)
 入 力
なし
 出 力
なし
 関数値
randVal:0x00000000から0xffffffffまでの乱数値
 機 能
呼び出すつど乱数値を返します。


<スプライン曲線計算処理>




Title

関数仕様

Function

曲線計算ワークエリア定義マクロ

Function Name

MTH_INIT_CURVE

No

22

 書 式
MTH_INIT_CURVEWORK(WORK_AREA, POINT_MAX)
 入 力
WORK_AREA
:ワークエリア名
POINT_MAX
:最大入力点数
 機 能
曲線計算関数を実行するために必要なワークエリアをユーザエリアに定義します。
この定義エリアのポインタを各曲線計算関数にパラメータとして渡します。
確保される容量は、最大入力点数×36バイトです。
なお、出力座標の個数は、(in_n−1)*step+1個ですので、それ以上の大きさの配列を用意してください。



Title

関数仕様

Function

2次元

Function Name

MTH_Curve2

No

23

 書 式
Unit32 count = MTH_Curve2 (MthCurveWork *work, MthXy *in_aray,Unit32 in_n, Unit32 out_n, MthXy *out_aray)
 入 力
work    
:ワークエリアのポインタ
in_aray 
:入力座標配列
in_n    
:入力座標の個数
out_n   
:出力座標の個数
 出 力
out_aray:出力座標配列
 関数値
count :2以上の出力座標の個数  0:パラメータエラー
 機 能
workは、MTH_INIT_CURVEマクロで確保したワークエリアを指定します。
in_arayは、曲線を通過させる入力座標の配列のポインタを指定します。
in_nは、in_arayの個数を指定します。3以上の値を指定してください。
out_nは、out_arayの個数を指定します。2以上の値を指定してください。
out_arayは、計算結果を受けるポインタです。曲線を通過する出力座標の配列が返されます。



Title

関数仕様

Function

2次元接線付き

Function Name

MTH_Curve2t

No

24

 書 式
Unit32 count=MTH_Curve2t(MthCurveWork *work, MthXy *in_aray,Unit32 in_n,Unit32 out_n, MthXy *out_aray, MthXy *tan_aray)
 入 力
work    
:ワークエリアのポインタ
in_aray 
:入力座標配列
in_n    
:入力座標の個数
out_n   
:出力座標の個数
 出 力
out_aray
:出力座標配列
tan_aray
:各出力座標の接線ベクトル
 関数値
count :2以上の出力座標の個数  0:パラメータエラー
 機 能
workは、MTH_INIT_CURVEマクロで確保したワークエリアを指定します。
in_arayは、曲線を通過させる入力座標の配列のポインタを指定します。
in_nは、in_arayの個数を指定します。3以上の値を指定してください。
out_nは、out_arayの個数を指定します。2以上の値を指定してください。
out_arayは、計算結果を受けるポインタです。曲線を通過する出力座標の配列が返されます。
tan_arayには、各出力座標での進行方向を示す接線ベクトルが返されます。接線ベクトルの大きさは、1.0です。



Title

関数仕様

Function

3次元

Function Name

MTH_Curve3

No

25

 書 式
Unit32 count = MTH_Curve3(MthCurveWork *work, MthXyz *in_aray,Unit32 in_n,Unit32 out_n, MthXyz *out_aray)
 入 力
work    
:ワークエリアのポインタ
in_aray 
:入力座標配列
in_n    
:入力座標の個数
out_n   
:出力座標の個数
 出 力
out_aray:出力座標配列
 関数値
count :2以上の出力座標の個数  0:パラメータエラー
 機 能
workは、MTH_INIT_CURVEマクロで確保したワークエリアを指定します。
in_arayは、曲線を通過させる入力座標の配列のポインタを指定します。
in_nは、in_arayの個数を指定します。3以上の値を指定してください。
out_nは、out_arayの個数を指定します。2以上の値を指定してください。
out_arayは、計算結果を受けるポインタです。曲線を通過する出力座標の配列が返されます。



Title

関数仕様

Function

3次元接線付き

Function Name

MTH_Curve3t

No

26

 書 式
Unit32 count = MTH_Curve3t(MthCurveWork *work, MthXyz *in_aray,Unit32 in_n, Unit32 out_n, MthXyz *out_aray, MthXyz *tan_aray)
 入 力
work    :ワークエリアのポインタ
in_aray :入力座標配列
in_n    :入力座標の個数
out_n   :出力座標の個数
 出 力
out_aray
:出力座標配列
tan_aray
:各出力座標の接線ベクトル
 関数値
count :2以上の出力座標の個数  0:パラメータエラー
 機 能
workは、MTH_INIT_CURVEマクロで確保したワークエリアを指定します。
in_arayは、曲線を通過させる入力座標の配列のポインタを指定します。
in_nは、in_arayの個数を指定します。3以上の値を指定してください。
out_nは、out_arayの個数を指定します。2以上の値を指定してください。
out_arayは、計算結果を受けるポインタです。曲線を通過する出力座標の配列が返されます。
tan_arayには、各出力座標での進行方向を示す接線ベクトルが返されます。接線ベクトルの大きさは、1.0です。
使用上の注意
これらの曲線計算関数は、処理速度優先で開発されているため、オーバーフローチェックを行っていません。しかし、これらの関数は演算の途中で大きな値を扱うため、オーバーフローすることがあります。入力データの許容範囲は次のとおりです。
また、今後のバージョンアップではアルゴリズムの変更などにより、入力パラメータが同じでも同一の出力座標を返さない場合があります。


<固定小数点演算>




Title

関数仕様

Function

乗算ルーチン

Function Name

MTH_Mul

No

27

 書 式
Fixed32 result = MTH_Mul(Fixed32 a, Fixed32 b)
 入 力
a
:被乗数
b
:乗数
 出 力
なし
 関数値
result:乗算結果
 機 能
固定小数点の乗算処理をします。



Title

関数仕様

Function

除算ルーチン

Function Name

MTH_Div

No

28

 書 式
Fixed32 result = MTH_Div(Fixed32 a, Fixed32 b)
 入 力
a
:被除数
b
:除数
 出 力
なし
 関数値
result:除算結果
 機 能
固定小数点の除算処理をします。



Title

関数仕様

Function

固定小数点→浮動小数点 型変換マクロ

Function Name

MTH_FLOAT

No

29

 書 式
float b = MTH_FLOAT(Fixed32 a)
 入 力
a:固定小数点データ
 出 力
なし
 関数値
b:浮動小数点への型変換結果
 機 能
固定小数点から浮動小数点形式への型変換マクロです。



Title

関数仕様

Function

浮動小数点→固定小数点 型変換マクロ

Function Name

MTH_FIXED

No

30

 書 式
Fixed32 b = MTH_FIXED(float a)
 入 力
a:浮動小数点データ
 出 力
なし
 関数値
b:固定小数点への型変換結果
 機 能
浮動小数点から固定小数点形式への型変換マクロです。



Title

関数仕様

Function

整数→固定小数点 型変換ルーチン

Function Name

MTH_IntToFixed

No

31

 書 式
Fixed32 b = MTH_IntToFixed(Sint32 a);
 入 力
a:整数データ
 出 力
なし
 関数値
b:固定小数点への型変換結果
 機 能
整数から固定小数点形式への型変換処理をします。



Title

関数仕様

Function

固定小数点→整数 型変換ルーチン

Function Name

MTH_FixedToInt

No

32

 書 式
Sint32 b = MTH_FixedToInt(Fixed a)
 入 力
a:固定小数点データ
 出 力
なし
 関数値
b:整数への型変換結果
 機 能
固定小数点から整数形式への型変換処理をします。



Title

関数仕様

Function

3項積和演算

Function Name

MTH_Product

No

33


 書 式
Fixed32 result = MTH_Product(Fixed32 *a, Fixed32 *b)
 入 力
a
:3個の被乗数データ列
b
:3個の乗数データ列
 出 力
なし
 関数値
result:積和演算結果
 機 能
result = a[0] * b[0]+a[1] * b[1] + a[2] * b[2]の演算処理をします。

<その他の関数>




Title

関数仕様

Function

平方根の計算

Function Name

MTH_Sqrt

No

34

 書 式
Fixed32 result = MTH_Sqrt(Fixed32x)
 入 力
x:正の固定小数点実数値
 出 力
なし
 関数値
result:平方根の計算値
 機 能
入力値の平方根を計算し、返します。



Title

関数仕様

Function

直角三角形の斜辺の長さ

Function Name

MTH_Hypot

No

35

 書 式
Fixed32 z = MTH_Hypot(Fixed32 x, Fixed32 y)
 入 力
x
:直角三角形の水平辺
y
:直角三角形の垂直辺
 出 力
なし
 関数値
z:直角三角形の斜辺の長さ
 機 能
次式を満たすzを返します。
zの2乗=xの2乗+yの2乗 かつ z≧0



Title

関数仕様

Function

面の法線ベクトル計算

Function Name

MTH_ComputeNormVect

No

36

 書 式
voidMTH_ComputeNormVect(Fixed32 surfNormK,MthXyz *p0,MthXyz *p1, MthXyz *p3, MthXyz *normal)
 入 力
surfNormK
:頂点間距離の補正値
p0       
:面上の右回り第1頂点の座標
p1       
:面上の右回り第2頂点の座標
p2       
:面上の右回り第3頂点の座標
 出 力
normal :面の法線ベクトル(単位ベクトル)
 関数値
なし
 機 能
指定右回り頂点の面に対する法線を計算します。法線ベクトルの面に対する方向は右ネジの逆方向です。
法線ベクトルの計算は面の3頂点のうちの2頂点間の差による2つのベクトルを得て、その外積により求めます。
指定された頂点間距離の補正値は絶対値化されて外積を求めるための2つのベクトルに掛けられます。これは、面の3頂点間が小さすぎたり逆に大きすぎたりした場合に、32ビットの固定小数点演算では外積計算でアンダーフローやオーバーフローを起こして正しく計算できないことがあるからです。
これを回避するために、面の3頂点の差によるベクトルを求めた段階でベクトルの絶対値がなるべく1.0 の近辺になるように頂点間距離の補正値を設定します。
頂点間距離の補正値の符号がマイナスの場合、法線ベクトルは逆向きになります。

戻る|   ■
PROGRAMMER'S GUIDE数学計算ライブラリ
Copyright SEGA ENTERPRISES, LTD., 1997