X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Fmath.hh;h=e72dec0bbd1853992131253f7e2ef7da4203efd0;hp=9a0c8eb82c8ef28eaa789ff6a4da4183bb18e1ec;hb=44b3014bce798789e795242d1556cb7449e6386a;hpb=831f04d4bc19a390415ac0bbac4331c7a65509bc diff --git a/src/moof/math.hh b/src/moof/math.hh index 9a0c8eb..e72dec0 100644 --- a/src/moof/math.hh +++ b/src/moof/math.hh @@ -1,34 +1,28 @@ -/*] Copyright (c) 2009-2010, Charles McGarvey [************************** +/*] Copyright (c) 2009-2011, Charles McGarvey [***************************** **] All rights reserved. * -* vi:ts=4 sw=4 tw=75 -* * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * -**************************************************************************/ +*****************************************************************************/ #ifndef _MOOF_MATH_HH_ #define _MOOF_MATH_HH_ -/** - * \file math.hh - * General math-related types and functions. - */ - #include +#include #include -#include +#include #if HAVE_CONFIG_H #include "config.h" #endif -#if USE_DOUBLE_PRECISION +#if ENABLE_DOUBLE_PRECISION typedef GLdouble GLscalar; #define GL_SCALAR GL_DOUBLE #define SCALAR(D) (D) @@ -39,12 +33,16 @@ typedef GLfloat GLscalar; #endif +/** + * \file math.hh + * General math-related types and functions. + */ + namespace moof { using namespace cml; - typedef GLscalar scalar; typedef vector< scalar, fixed<2> > vector2; @@ -55,11 +53,10 @@ typedef matrix< scalar, fixed<2,2>, col_basis, col_major > matrix2; typedef matrix< scalar, fixed<3,3>, col_basis, col_major > matrix3; typedef matrix< scalar, fixed<4,4>, col_basis, col_major > matrix4; -typedef quaternion< scalar, fixed<>, vector_first, positive_cross > quaternion; +typedef quaternion< scalar, fixed<>, vector_first, positive_cross > quaternion; typedef constants constants; - inline vector3 demote(const vector4& vec) { return vector3(vec[0], vec[1], vec[2]); @@ -93,10 +90,10 @@ inline bool is_equal(scalar a, scalar b, scalar epsilon = EPSILON) } -// Here are some generic implementations of a few simple integrators. To -// use, you need one type representing the state and another containing the -// derivatives of the primary state variables. The state class must -// implement these methods: +// Here are some generic implementations of a few simple integrators. To use, +// you need one type representing the state and another containing the +// derivatives of the primary state variables. The state class must implement +// these methods: // // void calculate_derivative(Derivative_Type& derivative, scalar absoluteTime); // void step(const Derivative_Type& derivative, scalar deltaTime); @@ -121,12 +118,10 @@ inline D evaluate(S state, scalar t, scalar dt, const D& derivative) return evaluate(state, t + dt); } - template inline void euler(S& state, scalar t, scalar dt) { D a = evaluate(state, t); - state.step(a, dt); } @@ -135,7 +130,6 @@ inline void rk2(S& state, scalar t, scalar dt) { D a = evaluate(state, t); D b = evaluate(state, t, dt * SCALAR(0.5), a); - state.step(b, dt); } @@ -146,8 +140,7 @@ inline void rk4(S& state, scalar t, scalar dt) D b = evaluate(state, t, dt * SCALAR(0.5), a); D c = evaluate(state, t, dt * SCALAR(0.5), b); D d = evaluate(state, t, dt, c); - - state.step((a + (b + c) * SCALAR(2.0) + d) * SCALAR(1.0/6.0), dt); + state.step((a + (b + c) * SCALAR(2.0) + d) * (SCALAR(1.0)/SCALAR(6.0)), dt); }