mathfunc.h 3.55 KB
/********************************************************************************
	mathfunc.h: NINTENDO64 DD Disk Drive IPL4 header.

	January 17, 1987
 ********************************************************************************/

#ifndef MATHFUNC_H
#define	MATHFUNC_H


/********************************************************************************/
/*																				*/
/*																				*/
/*	Convert number																*/
/*																				*/
/*																				*/
/********************************************************************************/

extern int BcdToBin(int bcd);
extern int BinToBcd(int bin);


/********************************************************************************/
/*																				*/
/*																				*/
/*	Short integer 3D vector														*/
/*																				*/
/*																				*/
/********************************************************************************/

typedef struct {
	short	x,y,z;
} SVector;

extern void SetSVector(SVector *vector, float x, float y, float z);


/********************************************************************************/
/*																				*/
/*																				*/
/*	Floating point 3D vector													*/
/*																				*/
/*																				*/
/********************************************************************************/

typedef struct {
	float	x,y,z;
} FVector;

extern void SetFVector(FVector *vector, float x, float y, float z);
extern void NormalizeFVector(FVector *vector);


/********************************************************************************/
/*																				*/
/*																				*/
/*	RGBA color																	*/
/*																				*/
/*																				*/
/********************************************************************************/

typedef struct {
	uchar	r,g,b,a;
} RGBAColor;

extern void SetRGBAColor(RGBAColor *color, uchar r, uchar g, uchar b, uchar a);


/********************************************************************************/
/*																				*/
/*																				*/
/*	Trigonometric functions														*/
/*																				*/
/*																				*/
/********************************************************************************/

#define	sin(a)		sinf(AngleToRadian(a))
#define	cos(a)		cosf(AngleToRadian(a))

extern float AngleToRadian(short angle);
extern float DegreeToRadian(float degree);
extern void	 AngvecToRadvec(FVector *radvec, SVector *angvec);
extern short atan(float x, float y);


/********************************************************************************/
/*																				*/
/*																				*/
/*	Matrix creator																*/
/*																				*/
/*																				*/
/********************************************************************************/

typedef float AffineMtx[4][4];

extern void	AffineToMtx(Mtx *matrix, AffineMtx *affine);
extern void CreateModelAffineMtx(AffineMtx *matrix, FVector *position, FVector *angle, FVector *scaling);
extern void CreateModelMatrix(Mtx *matrix, FVector *position, FVector *angle, FVector *scaling);
extern void CreateJointMatrix(Mtx *matrix, FVector *position, FVector *angle);
extern void DoRotation(AffineMtx *mtx, FVector *pnt);


/********************************************************************************/
/*																				*/
/*																				*/
/*	Random functions															*/
/*																				*/
/*																				*/
/********************************************************************************/

extern ushort Randomi(void);
extern float  Randomf(void);


#endif