Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5131 clevermous 1
/*
2
Copyright (C) 1996-1997 Id Software, Inc.
3
 
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License
6
as published by the Free Software Foundation; either version 2
7
of the License, or (at your option) any later version.
8
 
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
 
13
See the GNU General Public License for more details.
14
 
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
 
19
*/
20
// mathlib.h
21
 
22
typedef float vec_t;
23
typedef vec_t vec3_t[3];
24
typedef vec_t vec5_t[5];
25
 
26
typedef	int	fixed4_t;
27
typedef	int	fixed8_t;
28
typedef	int	fixed16_t;
29
 
30
#ifndef M_PI
31
#define M_PI		3.14159265358979323846	// matches value in gcc v2 math.h
32
#endif
33
 
34
struct mplane_s;
35
 
36
extern vec3_t vec3_origin;
37
extern	int nanmask;
38
 
39
#define	IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask)
40
 
41
#define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
42
#define VectorSubtract(a,b,c) {c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];}
43
#define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];}
44
#define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];}
45
 
46
void VectorMA (vec3_t veca, float scale, vec3_t vecb, vec3_t vecc);
47
 
48
vec_t _DotProduct (vec3_t v1, vec3_t v2);
49
void _VectorSubtract (vec3_t veca, vec3_t vecb, vec3_t out);
50
void _VectorAdd (vec3_t veca, vec3_t vecb, vec3_t out);
51
void _VectorCopy (vec3_t in, vec3_t out);
52
 
53
int VectorCompare (vec3_t v1, vec3_t v2);
54
vec_t Length (vec3_t v);
55
void CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross);
56
float VectorNormalize (vec3_t v);		// returns vector length
57
void VectorInverse (vec3_t v);
58
void VectorScale (vec3_t in, vec_t scale, vec3_t out);
59
int Q_log2(int val);
60
 
61
void R_ConcatRotations (float in1[3][3], float in2[3][3], float out[3][3]);
62
void R_ConcatTransforms (float in1[3][4], float in2[3][4], float out[3][4]);
63
 
64
void FloorDivMod (double numer, double denom, int *quotient,
65
		int *rem);
66
fixed16_t Invert24To16(fixed16_t val);
67
int GreatestCommonDivisor (int i1, int i2);
68
 
69
void AngleVectors (vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
70
int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct mplane_s *plane);
71
float	anglemod(float a);
72
 
73
 
74
 
75
#define BOX_ON_PLANE_SIDE(emins, emaxs, p)	\
76
	(((p)->type < 3)?						\
77
	(										\
78
		((p)->dist <= (emins)[(p)->type])?	\
79
			1								\
80
		:									\
81
		(									\
82
			((p)->dist >= (emaxs)[(p)->type])?\
83
				2							\
84
			:								\
85
				3							\
86
		)									\
87
	)										\
88
	:										\
89
		BoxOnPlaneSide( (emins), (emaxs), (p)))