// 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 )
return a > b? a: b;
}
+static inline float vg_clampf( float a, float min, float max )
+{
+ return vg_minf( max, vg_maxf( a, min ) );
+}
+
+#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;
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];
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;
+}
+
+static inline float v2_length2( v2f a )
+{
+ return a[0]*a[0] + a[1]*a[1];
+}
+
+static inline float v2_length( v2f a )
+{
+ return sqrtf( v2_length2( a ) );
+}
+
+static inline float v2_dist2( v2f a, v2f b )
+{
+ v2f delta;
+ v2_sub( a, b, delta );
+ return v2_length2( delta );
+}
+
+static inline float v2_dist( v2f a, v2f b )
+{
+ return sqrtf( v2_dist2( a, b ) );
+}
+
// Vector 3
// ==================================================================================================================
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
//======================================================================================================