From aeb60de1de05a640343c2e37ac3d5932a0fb369b Mon Sep 17 00:00:00 2001 From: cnlohr Date: Wed, 14 Dec 2016 22:41:03 -0500 Subject: Add Linmath to the redistributable portion. --- redist/linmath.h | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 redist/linmath.h (limited to 'redist/linmath.h') 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 + + + -- cgit v1.2.3