3.0.0 (2023-06-07) * Added Rect4*.h and Box6*.h for 2D and 3D boundaries, with numeric types matching those provided by Vector* * Added VectorConversions.h and RectBoxConversions.h with convenience macros for converting between structure data types and (for vectors) axis counts * Added MouseCoordinateTransforms.h * Added BezierCurve * Added ParameterSpline * Added Scalar.h * Added IntegerFraction * Added Grid * Added MoveInput * Added ActionInput * Adopted Armature, Animation (now ArmatureAnimation), AnimationState (now ArmaturePose), Camera, OrbitCamera, WalkCamera, and TextureAtlas from renderer. TextureAtlas is somewhat simplified from its previous form, containing only a mapping between hash table keys and rectangles and some basic math for transforming them to pixel dimensions. * Added Vector*_invert() and Vector*_inverted() * Added Vector*_multiplyComponents() and Vector*_divideComponents() * Added Vector*_toBarycenter() and Vector*_fromBarycenter() (replacing now-removed Barycentric.h) * Added Vector*_isZero() and Vector*_isEqual() * Added Vector2*_intersectLine(), Vector2*_intersectLineSegments(), and Vector3*_intersectPlane() * Added Vector2*_rotate90CW(), Vector2*_rotate90CCW(), and Vector3*_perpendicular() * Added Vector3*_rotate[XYZ]90CW, Vector3*_rotate[XYZ]90CCW(), and Vector3*_rotate[XYZ]180() * Added Vector*_positionOnLine(), Vector[34]*_positionOnPlane(), and Vector3*_closestLinePointToLine() * Added Vector*_round() * Added Rect/Box*_getSize(), Rect/Box*_constrainWithin(), Rect/Box*_intersectionNonempty(), Rect/Box*_unionNonempty(), and Rect/Box*_clampVector*() * Added Quaternion*_magnitude(), Quaternion*_magnitudeSquared(), Quaternion*_isZero(), and Quaternion*_isEqual() * Added Matrix4x4*_isEqual() and Matrix4x4*_isIdentity() * Added a context pointer to Interpolation to allow it to be used with ParameterSpline and other things that require extra data * Added matrix functions for constructing a transformation without immediately multiplying by it, and a convenience leftMultiply() function. * Added calculator executable target * Renamed Quaternion to Quaternionf, and added Quaternionx for fixed point calculations * Renamed Matrix to Matrix4x4f, and added Matrix4x4x for fixed point calculations * Fixed multiplications in Vector*x_reflect() and Vector*x_magnitude() giving wildly incorrect results * Fixed a bug that caused xsqrt to be nonterminating for some inputs * xmul and xdiv now return FIXED_16_16_INF or FIXED_16_16_NINF if the result overflows a 32-bit type * xmul and xdiv now return FIXED_16_16_INF, FIXED_16_16_NINF, or FIXED_16_16_NAN as appropriate if one of both of their inputs is inf or nan * Renamed interpolationContext's "interval" field to "duration" 2.2.0 (2014-11-02) * Renamed project from 3dmath to gamemath to more accurately fit its purpose * Added Interpolation module * Added xtof, ftox, xtod, and dtox macros (aliases of fixed16_16ToFloat, floatToFixed16_16, fixed16_16ToDouble, and doubleToFixed16_16, respectively) 2.1.1 (2014-06-29) * Added support for modern Xcode/iOS SDK versions * Renamed Matrix_rotate() "angle" parameter to "radians" for clarity 2.1.0 (2014-01-22) * Added Vector*_project() * Added Vector*_distance() and Vector*_distanceSquared() (2.0.0 had prototypes for them but implementations were missing) * Added Vector2x_rotate() * Vector*_reflect() is now implemented correctly to return reflection rather than negated reflection * Removed Vector_legacy.h * Fixed-point multiply and divide now round the result instead of truncating 2.0.0 (2014-01-10) * Added FixedPoint * Vector2, Vector3, and Vector4 now come in f (float), d (double), i (int), and x (16.16 fixed-point) variants * Legacy code can #include "3dmath/Vector_legacy.h" for macros that make existing references to Vector2, Vector3, and Vector4 behave as Vector2f, Vector3f, and Vector4f, respectively * Replaced Vector*_init() functions with VECTOR*(x, y[, z[, w]]) macros (type suffix is lower case) * Replaced Quaternion_init() function with QUATERNION(x, y, z, w) macro * Replaced Matrix_init() function with MATRIX(...) macro * Removed unfinished and unused Frustum 1.4.0 (2013-07-08) * Vector*_normalize() now returns a success boolean. Zero-magnitude vectors now return false and remain unaltered. * Added Matrix_interpolate() and Matrix_interpolated() * Added Vector*_scaleTo() and Vector*_scaledTo() * Added Vector2 and Vector4 constants: VECTOR2_LEFT, VECTOR2_RIGHT, VECTOR2_DOWN, VECTOR2_UP, VECTOR4_LEFT, VECTOR4_RIGHT, VECTOR4_DOWN, VECTOR4_UP, VECTOR4_BACK, VECTOR4_FRONT, VECTOR4_KATA, and VECTOR4_ANA * Added 64-bit Windows and Linux support 1.3.0 (2012-04-10) * Replaced functions that return prefabricated vectors, matrices, and quaternions (Vector2_zero(), Vector3_up(), Quaternion_identity(), Matrix_identity(), etc.) with compile-time constants 1.2.0 (2011-10-13) * Added Vector2_rotate() function * Changed some parameter names for greater clarity (particularly to distinguish between degrees and radians) 1.1.0 (2010-10-09) * Added Vector*_reflect() functions * Removed Quaternion_fromVector() and Quaternion_toVector() * More efficient implementations of Quaternion_multiply() and Quaternion_multiplyVector*() * Synced with latest template_stemlib 1.0.0 (2010-06-04) * Refreshed Makefile from template_stemlib Stable_2010-06-02 * Minor code formatting/naming tweaks 0.2.0 (2010-04-25) * Implemented Matrix_ortho() and Matrix_applyOrtho() * Refreshed Makefile and svn:externals from template_stemlib Stable_2010-04-23 0.1.0 (2010-04-07) * Refreshed Makefile and other project files from template_stemlib Stable_2010-04-06