aboutsummaryrefslogtreecommitdiff
path: root/src/vector3.c
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2013-11-18 23:38:44 +0100
committerRay <raysan5@gmail.com>2013-11-18 23:38:44 +0100
commit46f10b45ad181a00e8cfa3ba2540f2922e1553cd (patch)
treeda74ac29ab65c9c6fa82a36cadd796091a14d71f /src/vector3.c
parentcbbf800bb838431a626b232df8eb5db4e0a7e150 (diff)
downloadraylib-46f10b45ad181a00e8cfa3ba2540f2922e1553cd.tar.gz
raylib-46f10b45ad181a00e8cfa3ba2540f2922e1553cd.zip
raylib basic folders structure and some files... ;)
Diffstat (limited to 'src/vector3.c')
-rw-r--r--src/vector3.c140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/vector3.c b/src/vector3.c
new file mode 100644
index 00000000..8752f4d0
--- /dev/null
+++ b/src/vector3.c
@@ -0,0 +1,140 @@
+/*********************************************************************************************
+*
+* raylib.vector3
+*
+* Vector3 Functions Definition
+*
+* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
+*
+* This software is provided "as-is", without any express or implied warranty. In no event
+* will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose, including commercial
+* applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not claim that you
+* wrote the original software. If you use this software in a product, an acknowledgment
+* in the product documentation would be appreciated but is not required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
+* as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "vector3.h"
+
+#include <math.h>
+
+// Add two vectors
+Vector3 VectorAdd(Vector3 v1, Vector3 v2)
+{
+ Vector3 out;
+
+ out.x = v1.x + v2.x;
+ out.y = v1.y + v2.y;
+ out.z = v1.z + v2.z;
+
+ return out;
+}
+
+// Substract two vectors
+Vector3 VectorSubtract(Vector3 v1, Vector3 v2)
+{
+ Vector3 out;
+
+ out.x = v1.x - v2.x;
+ out.y = v1.y - v2.y;
+ out.z = v1.z - v2.z;
+
+ return out;
+}
+
+// Calculate two vectors cross product
+Vector3 VectorCrossProduct(Vector3 v1, Vector3 v2)
+{
+ Vector3 cross;
+
+ cross.x = v1.y*v2.z - v1.z*v2.y;
+ cross.y = v1.z*v2.x - v1.x*v2.z;
+ cross.z = v1.x*v2.y - v1.y*v2.x;
+
+ return cross;
+}
+
+// Calculate one vector perpendicular vector
+Vector3 VectorPerpendicular(Vector3 v)
+{
+ Vector3 out;
+
+ float min = fabs(v.x);
+ Vector3 cardinalAxis = {1.0, 0.0, 0.0};
+
+ if (fabs(v.y) < min)
+ {
+ min = fabs(v.y);
+ cardinalAxis = (Vector3){0.0, 1.0, 0.0};
+ }
+
+ if(fabs(v.z) < min)
+ {
+ cardinalAxis = (Vector3){0.0, 0.0, 1.0};
+ }
+
+ out = VectorCrossProduct(v, cardinalAxis);
+
+ return out;
+}
+
+// Calculate two vectors dot product
+float VectorDotProduct(Vector3 v1, Vector3 v2)
+{
+ float dot;
+
+ dot = v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
+
+ return dot;
+}
+
+// Calculate vector lenght
+float VectorLength(const Vector3 v)
+{
+ float length;
+
+ length = sqrt(v.x*v.x + v.y*v.y + v.z*v.z);
+
+ return length;
+}
+
+// Scale provided vector
+void VectorScale(Vector3 *v, float scale)
+{
+ v->x *= scale;
+ v->y *= scale;
+ v->z *= scale;
+}
+
+// Invert provided vector (direction)
+void VectorInverse(Vector3 *v)
+{
+ v->x = -v->x;
+ v->y = -v->y;
+ v->z = -v->z;
+}
+
+// Normalize provided vector
+void VectorNormalize(Vector3 *v)
+{
+ float length, ilength;
+
+ length = VectorLength(*v);
+
+ if (length == 0) length = 1;
+
+ ilength = 1.0/length;
+
+ v->x *= ilength;
+ v->y *= ilength;
+ v->z *= ilength;
+}