aboutsummaryrefslogtreecommitdiff
path: root/redist/linmath.h
diff options
context:
space:
mode:
authorcnlohr <lohr85@gmail.com>2016-12-14 22:41:03 -0500
committercnlohr <lohr85@gmail.com>2016-12-14 22:41:03 -0500
commitaeb60de1de05a640343c2e37ac3d5932a0fb369b (patch)
treebe6b45cc88773053357653ab73be65bd3abf7ccf /redist/linmath.h
parent071ce2fb0b6155a5b3139fb55a928401b549ab66 (diff)
downloadlibsurvive-aeb60de1de05a640343c2e37ac3d5932a0fb369b.tar.gz
libsurvive-aeb60de1de05a640343c2e37ac3d5932a0fb369b.tar.bz2
Add Linmath to the redistributable portion.
Diffstat (limited to 'redist/linmath.h')
-rw-r--r--redist/linmath.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/redist/linmath.h b/redist/linmath.h
new file mode 100644
index 0000000..9b21347
--- /dev/null
+++ b/redist/linmath.h
@@ -0,0 +1,64 @@
+//Copyright 2013,2016 <>< C. N. Lohr. This file licensed under the terms of the MIT/x11 license.
+
+#ifndef _LINMATH_H
+#define _LINMATH_H
+
+//Yes, I know it's kind of arbitrary.
+#define DEFAULT_EPSILON 0.001
+
+//If you want, you can define FLT to be double for double precision.
+#ifndef FLT
+#define FLT float
+#endif
+
+
+//NOTE: Inputs may never be output with cross product.
+void cross3d( FLT * out, const FLT * a, const FLT * b );
+
+void sub3d( FLT * out, const FLT * a, const FLT * b );
+
+void add3d( FLT * out, const FLT * a, const FLT * b );
+
+void scale3d( FLT * out, const FLT * a, FLT scalar );
+
+void normalize3d( FLT * out, const FLT * in );
+
+FLT dot3d( const FLT * a, const FLT * b );
+
+//Returns 0 if equal. If either argument is null, 0 will ALWAYS be returned.
+int compare3d( const FLT * a, const FLT * b, FLT epsilon );
+
+void copy3d( FLT * out, const FLT * in );
+
+
+
+
+//Quaternion things...
+
+void quatsetnone( FLT * q );
+void quatcopy( FLT * qout, const FLT * qin );
+void quatfromeuler( FLT * q, const FLT * euler );
+void quattoeuler( FLT * euler, const FLT * q );
+void quatfromaxisangle( FLT * q, const FLT * axis, FLT radians );
+FLT quatmagnitude( const FLT * q );
+FLT quatinvsqmagnitude( const FLT * q );
+void quatnormalize( FLT * qout, const FLT * qin ); //Safe for in to be same as out.
+void quattomatrix( FLT * matrix44, const FLT * q );
+void quatgetconjugate( FLT * qout, const FLT * qin );
+void quatgetreciprocal( FLT * qout, const FLT * qin );
+void quatsub( FLT * qout, const FLT * a, const FLT * b );
+void quatadd( FLT * qout, const FLT * a, const FLT * b );
+void quatrotateabout( FLT * qout, const FLT * a, const FLT * b ); //same as quat multiply, not piecewise multiply.
+void quatscale( FLT * qout, const FLT * qin, FLT s );
+FLT quatinnerproduct( const FLT * qa, const FLT * qb );
+void quatouterproduct( FLT * outvec3, FLT * qa, FLT * qb );
+void quatevenproduct( FLT * q, FLT * qa, FLT * qb );
+void quatoddproduct( FLT * outvec3, FLT * qa, FLT * qb );
+void quatslerp( FLT * q, const FLT * qa, const FLT * qb, FLT t );
+void quatrotatevector( FLT * vec3out, const FLT * quat, const FLT * vec3in );
+
+
+#endif
+
+
+