X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg%2Fvg_m.h;h=690683710d816a9bec4ec8444b29d54b58b9e007;hb=95036f2af35f1b5af66bfcd90811f7c3c4bebf78;hp=de9cb6dd3713dc837f12b726e678634ab614d13d;hpb=bd3188f0fe52c9231f79af85d6cfaef2576b9f83;p=fishladder.git diff --git a/vg/vg_m.h b/vg/vg_m.h index de9cb6d..6906837 100644 --- a/vg/vg_m.h +++ b/vg/vg_m.h @@ -3,7 +3,8 @@ // Util // ================================================================================================================== -#define VG_PIf 3.14159265358979323846264338327950288f +#define VG_PIf 3.14159265358979323846264338327950288f +#define VG_TAUf 6.28318530717958647692528676655900576f // Simple min/max replacements static inline float vg_minf( float a, float b ) @@ -16,6 +17,10 @@ static inline float vg_maxf( float a, float b ) return a > b? a: b; } +#define VG_MIN( A, B ) ((A)<(B)?(A):(B)) +#define VG_MAX( A, B ) ((A)>(B)?(A):(B)) + +// Hopefully deprecate this!! static inline int vg_min( int a, int b ) { return a < b? a: b; @@ -72,6 +77,12 @@ static inline void v2_muls( v2f a, float s, v2f d ) d[0] = a[0]*s; d[1] = a[1]*s; } +static inline void v2_divs( v2f a, float s, v2f d ) +{ + d[0] = a[0]/s; d[1] = a[1]/s; +} + + static inline void v2_mul( v2f a, v2f b, v2f d ) { d[0] = a[0]*b[0]; d[1] = a[1]*b[1]; @@ -82,6 +93,11 @@ static inline void v2_div( v2f a, v2f b, v2f d ) d[0] = a[0]/b[0]; d[1] = a[1]/b[1]; } +static inline void v2_muladds( v2f a, v2f b, float s, v2f d ) +{ + d[0] = a[0]+b[0]*s; d[1] = a[1]+b[1]*s; +} + // Vector 3 // ================================================================================================================== @@ -225,6 +241,40 @@ static inline void v4_zero( v4f a ) a[0] = 0.f; a[1] = 0.f; a[2] = 0.f; a[3] = 0.f; } +// Matrix 2x2 +// =========================================================================================================== + +#define M2X2_INDENTIY {{1.0f, 0.0f, }, \ + { 0.0f, 1.0f, }} + +#define M2X2_ZERO {{0.0f, 0.0f, }, \ + { 0.0f, 0.0f, }} + +static inline void m2x2_copy( m2x2f a, m2x2f b ) +{ + v2_copy( a[0], b[0] ); + v2_copy( a[1], b[1] ); +} + +static inline void m2x2_identity( m2x2f a ) +{ + m2x2f id = M2X2_INDENTIY; + m2x2_copy( id, a ); +} + +static inline void m2x2_create_rotation( m2x2f a, float theta ) +{ + float s, c; + + s = sinf( theta ); + c = cosf( theta ); + + a[0][0] = c; + a[0][1] = -s; + a[1][0] = s; + a[1][1] = c; +} + // Matrix 3x3 //======================================================================================================