Browse Source

Documented MatMath

Added notice of changes to greatest.h
Removed unnecessary install_name_tool call in makefile
Thomas Buck 11 years ago
parent
commit
639d95badf
5 changed files with 89 additions and 110 deletions
  1. 1
    0
      ChangeLog
  2. 0
    3
      Makefile
  3. 60
    88
      include/MatMath.h
  4. 24
    18
      src/MatMath.cpp
  5. 4
    1
      test/greatest.h

+ 1
- 0
ChangeLog View File

6
  OpenRaider (0.1.2) xythobuz <xythobuz@xythobuz.de>
6
  OpenRaider (0.1.2) xythobuz <xythobuz@xythobuz.de>
7
 
7
 
8
 	[ 20140111 ]
8
 	[ 20140111 ]
9
+	* Documented MatMath, fixed bug in helRandomNum()
9
 	* Only one way of conversion between Deg and Rad in MatMath
10
 	* Only one way of conversion between Deg and Rad in MatMath
10
 	* Use the same style of include guards in all headers
11
 	* Use the same style of include guards in all headers
11
 	* Added memory test to SkeletalModel. Adding to OpenGLMesh causes
12
 	* Added memory test to SkeletalModel. Adding to OpenGLMesh causes

+ 0
- 3
Makefile View File

365
 	$(CC) $(TEST_FLAGS) \
365
 	$(CC) $(TEST_FLAGS) \
366
 		-DUSING_OPENAL $(AUDIO_LIBS) $(AUDIO_DEFS) \
366
 		-DUSING_OPENAL $(AUDIO_LIBS) $(AUDIO_DEFS) \
367
 		src/Sound.cpp test/Sound.cpp -o $(BUILD_TEST_DIR)/Sound.test
367
 		src/Sound.cpp test/Sound.cpp -o $(BUILD_TEST_DIR)/Sound.test
368
-ifeq ($(UNAME),Darwin)
369
-	install_name_tool -change libalut.0.1.0.dylib /opt/local/lib/libalut.0.1.0.dylib $(BUILD_TEST_DIR)/Sound.test
370
-endif
371
 
368
 
372
 #################################################################
369
 #################################################################
373
 
370
 

+ 60
- 88
include/MatMath.h View File

1
-/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: t; c-basic-offset: 3 -*- */
2
-/*================================================================
1
+/*!
3
  *
2
  *
4
- * Project : Freyja
5
- * Author  : Terry 'Mongoose' Hendrix II
6
- * Website : http://www.westga.edu/~stu7440/
7
- * Email   : stu7440@westga.edu
8
- * Object  :
9
- * License : No use w/o permission (C) 2002 Mongoose
10
- * Comments:
3
+ * \file include/MatMath.h
4
+ * \brief Vector and Matrix math
11
  *
5
  *
12
- *
13
- *           This file was generated using Mongoose's C++
14
- *           template generator script.  <stu7440@westga.edu>
15
- *
16
- *-- History ------------------------------------------------
17
- *
18
- * 2002.05.11:
19
- * Mongoose - Created
20
- ================================================================*/
21
-
6
+ * \author Mongoose
7
+ */
22
 
8
 
23
 #ifndef _MATMATH_H
9
 #ifndef _MATMATH_H
24
 #define _MATMATH_H
10
 #define _MATMATH_H
25
 
11
 
26
-#define HEL_PI           3.14159265358979323846  /* pi */
27
-#define HEL_PI_OVER_2    1.57079632679489661923  /* pi/2 */
28
-#define HEL_2_PI         6.28318530717958647692  /* pi*2 */
29
-#define HEL_PI_OVER_4    0.78539816339744830962  /* pi/4 */
30
-#define HEL_PI_OVER_180  0.017453292519943295    /* pi/180 */
31
-#define HEL_180_OVER_PI  57.295779513082323      /* 180/pi */
32
-
33
-#define HEL_RAD_TO_DEG(x) ((x) * HEL_180_OVER_PI)
34
-#define HEL_DEG_TO_RAD(x) ((x) * HEL_PI_OVER_180)
12
+#define HEL_PI           3.14159265358979323846 //!< pi
13
+#define HEL_PI_OVER_2    1.57079632679489661923 //!< pi/2
14
+#define HEL_2_PI         6.28318530717958647692 //!< pi*2
15
+#define HEL_PI_OVER_4    0.78539816339744830962 //!< pi/4
16
+#define HEL_PI_OVER_180  0.017453292519943295   //!< pi/180
17
+#define HEL_180_OVER_PI  57.295779513082323     //!< 180/pi
35
 
18
 
36
-typedef float vec_t;
37
-typedef float vec2_t[2];
38
-typedef float vec3_t[3];
39
-typedef float vec4_t[4];
40
-typedef vec_t matrix_t[16];  /* Used as _Column_major_ in every class now! */
19
+#define HEL_RAD_TO_DEG(x) ((x) * HEL_180_OVER_PI) //!< Convert radians to degrees
20
+#define HEL_DEG_TO_RAD(x) ((x) * HEL_PI_OVER_180) //!< Convert degrees to radians
41
 
21
 
22
+typedef float vec_t;        //!< 1D Vector, aka float
23
+typedef float vec2_t[2];    //!< 2D Vector
24
+typedef float vec3_t[3];    //!< 3D Vector
25
+typedef float vec4_t[4];    //!< 4D Vector
26
+typedef vec_t matrix_t[16]; //!< Used as _Column_major_ in every class now!
42
 
27
 
43
-int helIntersectionLineAndPolygon(vec3_t intersect,
44
-											 vec3_t p1, vec3_t p2,
45
-											 unsigned int vertexCount, vec3_t *ploygon);
46
-/*------------------------------------------------------
47
- * Pre  : Given P1 and P2 of line segment and
48
- *        Vertex count and ploygon with count vertices
49
- *
50
- *        Only supports triangles and coplanar quads
51
- *
52
- * Post : Returns intersect point or 0 if none
53
- *
54
- *-- History ------------------------------------------
55
- *
56
- * 2003.05.30:
57
- * Mongoose - Created
58
- ------------------------------------------------------*/
28
+/*!
29
+ * \brief Calculate Intersection of a line and a polygon
30
+ * \param intersect Where the intersection is stored, if it exists
31
+ * \param p1 First point of line segment
32
+ * \param p2 Second point of line segment
33
+ * \param vertexCount number of vertices in polygon
34
+ * \param polygon polygon vertex array
35
+ * \returns 0 if there is no intersection
36
+ */
37
+int helIntersectionLineAndPolygon(vec3_t intersect, vec3_t p1, vec3_t p2, unsigned int vertexCount, vec3_t *polygon);
59
 
38
 
39
+/*!
40
+ * \brief Calculate the distance from a sphere to a plane
41
+ * \param center Center of sphere
42
+ * \param radius Radius of sphere
43
+ * \param plane Plane
44
+ * \returns distance
45
+ */
60
 vec_t helDistToSphereFromPlane3v(vec3_t center,	vec_t radius, vec4_t plane);
46
 vec_t helDistToSphereFromPlane3v(vec3_t center,	vec_t radius, vec4_t plane);
61
-/*------------------------------------------------------
62
- * Pre  : Given center and radius of sphere and a plane
63
- * Post : Returns distance from sphere to plane
64
- *
65
- *-- History ------------------------------------------
66
- *
67
- * 1999.06.14:
68
- * Mongoose - Created, from mtk3d
69
- ------------------------------------------------------*/
70
 
47
 
48
+/*!
49
+ * \brief Calculate the distance from a box to a plane
50
+ * \param min Minimum Point of a bounding box
51
+ * \param max Maximum Point of a bounding box
52
+ * \param plane Plane
53
+ * \returns distance
54
+ */
71
 vec_t helDistToBboxFromPlane3v(vec3_t min, vec3_t max, vec4_t plane);
55
 vec_t helDistToBboxFromPlane3v(vec3_t min, vec3_t max, vec4_t plane);
72
-/*------------------------------------------------------
73
- * Pre  : Given min and max points of a bounding box
74
- *        and a plane
75
- *
76
- * Post : Returns distance from box to plane
77
- *
78
- *-- History ------------------------------------------
79
- *
80
- * 1999.06.14:
81
- * Mongoose - Created, from mtk3d
82
- ------------------------------------------------------*/
83
 
56
 
57
+/*!
58
+ * \brief Calculate the length of a line segment / the distance between two points
59
+ * \param a First point
60
+ * \param b Second point
61
+ * \returns distance/length
62
+ */
84
 vec_t helDist3v(vec3_t a, vec3_t b);
63
 vec_t helDist3v(vec3_t a, vec3_t b);
85
-/*------------------------------------------------------
86
- * Pre  : Given point A and B
87
- * Post : Returns length of line segment
88
- *
89
- *-- History ------------------------------------------
90
- *
91
- * 1999.06.14:
92
- * Mongoose - Created, from mtk3d
93
- ------------------------------------------------------*/
94
 
64
 
65
+/*!
66
+ * \brief Calculates the midpoint between two points / of a line segment
67
+ * \param a First point
68
+ * \param b Second point
69
+ * \param mid Midpoint will be stored here
70
+ */
95
 void helMidpoint3v(vec3_t a, vec3_t b, vec3_t mid);
71
 void helMidpoint3v(vec3_t a, vec3_t b, vec3_t mid);
96
-/*------------------------------------------------------
97
- * Pre  : Given point A and B
98
- * Post : Returns midpoint of line segment
99
- *
100
- *-- History ------------------------------------------
101
- *
102
- * 1999.06.14:
103
- * Mongoose - Created, from mtk3d
104
- ------------------------------------------------------*/
105
-
106
 
72
 
73
+/*!
74
+ * \brief Calculates a pseudo-random number
75
+ * \param from Lower bound of resulting number
76
+ * \param to Upper bound
77
+ * \returns random number
78
+ */
107
 vec_t helRandomNum(vec_t from, vec_t to);
79
 vec_t helRandomNum(vec_t from, vec_t to);
108
 
80
 
109
 #endif
81
 #endif

+ 24
- 18
src/MatMath.cpp View File

1
-/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: t; c-basic-offset: 3 -*- */
1
+/*!
2
+ *
3
+ * \file src/MatMath.cpp
4
+ * \brief Vector and Matrix math
5
+ *
6
+ * \author Mongoose
7
+ */
2
 
8
 
3
 #include <stdlib.h>
9
 #include <stdlib.h>
4
 #include <math.h>
10
 #include <math.h>
122
 
128
 
123
 int helIntersectionLineAndPolygon(vec3_t intersect,
129
 int helIntersectionLineAndPolygon(vec3_t intersect,
124
 											 vec3_t p1, vec3_t p2,
130
 											 vec3_t p1, vec3_t p2,
125
-											 unsigned int vertexCount, vec3_t *ploygon)
131
+											 unsigned int vertexCount, vec3_t *polygon)
126
 {
132
 {
127
 	//	vec3_t normal, a, b;
133
 	//	vec3_t normal, a, b;
128
 	Vector3d a, b, normal, pA, pB;
134
 	Vector3d a, b, normal, pA, pB;
134
 	pB = Vector3d(p2);
140
 	pB = Vector3d(p2);
135
 
141
 
136
 	// Find normal
142
 	// Find normal
137
-	//mtkVectorSubtract(ploygon[1], ploygon[0], a);
138
-	a = Vector3d(ploygon[1]) - Vector3d(ploygon[0]);
139
-	//mtkVectorSubtract(ploygon[2], ploygon[0], b);
140
-	b = Vector3d(ploygon[2]) - Vector3d(ploygon[0]);
143
+	//mtkVectorSubtract(polygon[1], polygon[0], a);
144
+	a = Vector3d(polygon[1]) - Vector3d(polygon[0]);
145
+	//mtkVectorSubtract(polygon[2], polygon[0], b);
146
+	b = Vector3d(polygon[2]) - Vector3d(polygon[0]);
141
 	normal = Vector3d::cross(a, b);
147
 	normal = Vector3d::cross(a, b);
142
 	//mtkVectorCrossProduct(a, b, normal);
148
 	//mtkVectorCrossProduct(a, b, normal);
143
 	normal.normalize();
149
 	normal.normalize();
144
 	//mtkVectorNormalize(normal, normal);
150
 	//mtkVectorNormalize(normal, normal);
145
 
151
 
146
 	// find D
152
 	// find D
147
-	//d = (normal[0] * ploygon[0][0] -
148
-	//	  normal[1] * ploygon[0][1] -
149
-	//	  normal[2] * ploygon[0][2]);
150
-	d = (normal.mVec[0] * ploygon[0][0] -
151
-		  normal.mVec[1] * ploygon[0][1] -
152
-		  normal.mVec[2] * ploygon[0][2]);
153
+	//d = (normal[0] * polygon[0][0] -
154
+	//	  normal[1] * polygon[0][1] -
155
+	//	  normal[2] * polygon[0][2]);
156
+	d = (normal.mVec[0] * polygon[0][0] -
157
+		  normal.mVec[1] * polygon[0][1] -
158
+		  normal.mVec[2] * polygon[0][2]);
153
 
159
 
154
 	// line segment parallel to plane?
160
 	// line segment parallel to plane?
155
 	//mtkVectorSubtract(p2, p1, a); // cache p2 - p1 => a
161
 	//mtkVectorSubtract(p2, p1, a); // cache p2 - p1 => a
182
 
188
 
183
 	// See if the intercept is bound by polygon by winding number
189
 	// See if the intercept is bound by polygon by winding number
184
 #ifdef WINDING_NUMBERS_TRIANGLE
190
 #ifdef WINDING_NUMBERS_TRIANGLE
185
-	mtkVectorSubtract(ploygon[0], intersect, a);
191
+	mtkVectorSubtract(polygon[0], intersect, a);
186
 	mtkVectorNormalize(a, a);
192
 	mtkVectorNormalize(a, a);
187
-	mtkVectorSubtract(ploygon[1], intersect, b);
193
+	mtkVectorSubtract(polygon[1], intersect, b);
188
 	mtkVectorNormalize(b, b);
194
 	mtkVectorNormalize(b, b);
189
-	mtkVectorSubtract(ploygon[2], intersect, c);
195
+	mtkVectorSubtract(polygon[2], intersect, c);
190
 	mtkVectorNormalize(c, c);
196
 	mtkVectorNormalize(c, c);
191
 
197
 
192
 	t0 = mtkVectorDotProduct(a, b);
198
 	t0 = mtkVectorDotProduct(a, b);
198
 	if (total - 360 < 0.0)
204
 	if (total - 360 < 0.0)
199
 		return 0;
205
 		return 0;
200
 #else // assume convex polygons here for sure
206
 #else // assume convex polygons here for sure
201
-	//mtkVectorSubtract(intersect, ploygon[0], a);
207
+	//mtkVectorSubtract(intersect, polygon[0], a);
202
 	//theta = mtkVectorDotProduct(a, normal);
208
 	//theta = mtkVectorDotProduct(a, normal);
203
-	theta = Vector3d::dot(b - Vector3d(ploygon[0]), normal); // b = intersect
209
+	theta = Vector3d::dot(b - Vector3d(polygon[0]), normal); // b = intersect
204
 
210
 
205
 	if (theta >= 90.0) // Yeah I know
211
 	if (theta >= 90.0) // Yeah I know
206
 		return 0;
212
 		return 0;
285
 
291
 
286
 vec_t helRandomNum(vec_t from, vec_t to)
292
 vec_t helRandomNum(vec_t from, vec_t to)
287
 {
293
 {
288
-	return from + (to*rand()/(RAND_MAX+1.0));
294
+	return from + ((to - from) * rand() / (RAND_MAX + 1.0));
289
 }
295
 }
290
 
296
 

+ 4
- 1
test/greatest.h View File

1
 /*
1
 /*
2
  * Copyright (c) 2011 Scott Vokes <vokes.s@gmail.com>
2
  * Copyright (c) 2011 Scott Vokes <vokes.s@gmail.com>
3
  *
3
  *
4
+ * Modified 2014 by Thomas Buck <xythobuz@xythobuz.de>
5
+ * --> C++ support
6
+ *
4
  * Permission to use, copy, modify, and/or distribute this software for any
7
  * Permission to use, copy, modify, and/or distribute this software for any
5
  * purpose with or without fee is hereby granted, provided that the above
8
  * purpose with or without fee is hereby granted, provided that the above
6
  * copyright notice and this permission notice appear in all copies.
9
  * copyright notice and this permission notice appear in all copies.
18
 #define GREATEST_H
21
 #define GREATEST_H
19
 
22
 
20
 #ifdef __cplusplus
23
 #ifdef __cplusplus
21
-#define __STDC_VERSION__ 19901L
24
+#define __STDC_VERSION__ 19901L // C++ compilers support var args
22
 extern "C"
25
 extern "C"
23
 {
26
 {
24
 #endif
27
 #endif

Loading…
Cancel
Save