File: bspvector.h

package info (click to toggle)
battleball 2.0-13
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,016 kB
  • ctags: 3,097
  • sloc: cpp: 15,310; makefile: 48; csh: 34
file content (139 lines) | stat: -rw-r--r-- 2,897 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
 *	file:		bspvector.h
 *	description:	vector module
 *	author:		A. T. Campbell, III
 *	date:		February 9, 1995
 */

#ifndef bspvector_h
#define bspvector_h

/* type definitions */
typedef float Vec2f[2];
typedef float Vec3f[3];
typedef float Vec4f[4];

/* return values */

/* 3D functions */
inline void		Vadd3f(Vec3f v1, Vec3f v2, Vec3f sum);
inline void		Vcopy3f(Vec3f src, Vec3f dest);
inline void		Vcross3f(Vec3f va, Vec3f vb, Vec3f vprod);
inline float		Vdot3f(Vec3f v1, Vec3f v2);
inline void		Vnormalize3f(Vec3f vec);
inline void		Vset3f(float x, float y, float z, Vec3f vec);
inline void		Vsub3f(Vec3f v1, Vec3f v2, Vec3f diff);
inline void		Vtimes3f(float factor, Vec3f vin, Vec3f vout);
inline void		Vmin3f(Vec3f v1, Vec3f v2, Vec3f minvec);
inline void		Vmax3f(Vec3f v1, Vec3f v2, Vec3f maxvec);

/* 4D functions */
inline void		Vcopy4f(Vec4f src, Vec4f dest);
inline void		Vset4f(float x, float y, float z, float w, Vec4f vec);

#include <math.h>
/* #include <stdio.h> #include <stdlib.h> */

inline void
Vadd3f(Vec3f v1, Vec3f v2, Vec3f sum)
{
	sum[0] = v1[0] + v2[0];
	sum[1] = v1[1] + v2[1];
	sum[2] = v1[2] + v2[2];
}

inline void
Vcopy3f(Vec3f src, Vec3f dest)
{
	dest[0] = src[0];
	dest[1] = src[1];
	dest[2] = src[2];
}

inline void             
Vcross3f(Vec3f va, Vec3f vb, Vec3f vprod)
{
	Vec3f temp;
       	temp[0] = va[1] * vb[2] - va[2] * vb[1];
	temp[1] = va[2] * vb[0] - va[0] * vb[2];
	vprod[2] = va[0] * vb[1] - va[1] * vb[0];
       	vprod[0] = temp[0];
	vprod[1] = temp[1];
}

inline float
Vdot3f(Vec3f v1, Vec3f v2)
{
	return(v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]);
}

inline void
Vnormalize3f(Vec3f vec)
{
	float length, lengthSquared;
	lengthSquared = Vdot3f(vec, vec);
	if (lengthSquared <= 0.)
		Vset3f(0., 0., 0., vec);
	else {
		length = sqrt(lengthSquared);
		Vtimes3f(1./length, vec, vec);
	}
}
inline void
Vset3f(float x, float y, float z, Vec3f vec)
{
	vec[0] = x;
	vec[1] = y;
	vec[2] = z;
}

inline void
Vsub3f(Vec3f v1, Vec3f v2, Vec3f diff)
{
	diff[0] = v1[0] - v2[0];
	diff[1] = v1[1] - v2[1];
	diff[2] = v1[2] - v2[2];
}

inline void
Vtimes3f(float factor, Vec3f vin, Vec3f vout)
{
	vout[0] = vin[0] * factor;
	vout[1] = vin[1] * factor;
	vout[2] = vin[2] * factor;
}

inline void
Vcopy4f(Vec4f src, Vec4f dest)
{
	dest[0] = src[0];
	dest[1] = src[1];
	dest[2] = src[2];
	dest[3] = src[3];
}

inline void
Vset4f(float x, float y, float z, float w, Vec3f vec)
{
	vec[0] = x;
	vec[1] = y;
	vec[2] = z;
	vec[3] = w;
}

/* funcs added by PAH below: */

inline void Vmin3f(Vec3f v1, Vec3f v2, Vec3f minvec) {
  minvec[0]= v1[0]<v2[0] ? v1[0] : v2[0];
  minvec[1]= v1[1]<v2[1] ? v1[1] : v2[1];
  minvec[2]= v1[2]<v2[2] ? v1[2] : v2[2];
}

inline void Vmax3f(Vec3f v1, Vec3f v2, Vec3f maxvec) {
  maxvec[0]= v1[0]>v2[0] ? v1[0] : v2[0];
  maxvec[1]= v1[1]>v2[1] ? v1[1] : v2[1];
  maxvec[2]= v1[2]>v2[2] ? v1[2] : v2[2];
}


#endif /* bspvector_h */