#ifndef PRB_MATH_H #define PRB_MATH_H /* NOTE(pryazha): Numeric */ #define F32PI 3.14159265359f #define DEG2RAD F32PI/180.0f #define RAD2DEG 182.0f/F32PI F32 f32sin(F32 a); F32 f32cos(F32 a); F32 f32tan(F32 a); F32 f32sqrt(F32 a); /* NOTE(pryazha): Vectors */ V2 v2(F32 x, F32 y); V2 v2a(F32 x); V2 invv2(V2 a); V2 addv2(V2 a, V2 b); V2 subv2(V2 a, V2 b); V2 scalefv2(V2 a, F32 s); V2 scalev2(V2 a, V2 s); F32 dotv2(V2 a, V2 b); F32 len2v2(V2 a); F32 lenv2(V2 a); V2 normv2(V2 a); void printv2(V2 a); V3 v3(F32 x, F32 y, F32 z); V3 v3a(F32 x); V3 v3fromv2(V2 a); V3 v3fromv4(V4 a); V3 invv3(V3 a); V3 addv3(V3 a, V3 b); V3 subv3(V3 a, V3 b); V3 scalefv3(V3 a, F32 s); V3 scalev3(V3 a, V3 s); F32 dotv3(V3 a, V3 b); V3 crossv3(V3 l, V3 r); F32 len2v3(V3 a); F32 lenv3(V3 a); V3 normv3(V3 a); void printv3(V3 a); V4 v4(F32 x, F32 y, F32 z, F32 w); V4 v4a(F32 x); V4 v4fromv3(V3 a); V4 invv4(V4 a); V4 addv4(V4 a, V4 b); V4 subv4(V4 a, V4 b); V4 scalefv4(V4 a, F32 s); V4 scalev4(V4 a, V4 s); F32 dotv4(V4 a, V4 b); F32 len2v4(V4 a); F32 lenv4(V4 a); V4 normv4(V4 a); void printv4(V4 a); /* NOTE(pryazha): Matrices */ F32 detmat4(MAT4 m); MAT4 transpmat4(MAT4 m); MAT4 mulmat4(MAT4 left, MAT4 right); MAT4 translmat4(MAT4 m, V3 v); MAT4 scalemat4(MAT4 m, V3 v); MAT4 rotateaxismat4(V3 x, V3 y, V3 z); /* NOTE(pryazha): Angles in degrees */ MAT4 rotatemat4(MAT4 m, V3 angles); V4 mulmat4v4(MAT4 m, V4 v); void printmat4(MAT4 m); #endif /* PRB_MATH_H */