#ifndef PRB_MATH_H #define PRB_MATH_H /* NOTE(pryazha): Numeric */ #define F32_PI 3.14159265359f #define DEG2RAD F32_PI/180.0f #define RAD2DEG 182.0f/F32_PI 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 v2inv(V2 a); V2 v2add(V2 a, V2 b); V2 v2sub(V2 a, V2 b); V2 v2scalef(V2 a, F32 s); V2 v2scale(V2 a, V2 s); F32 v2dot(V2 a, V2 b); F32 v2len2(V2 a); F32 v2len(V2 a); V2 v2norm(V2 a); void v2print(V2 a); V3 v3(F32 x, F32 y, F32 z); V3 v3a(F32 x); V3 v3fromv2(V2 a); V3 v3fromv4(V4 a); V3 v3inv(V3 a); V3 v3add(V3 a, V3 b); V3 v3sub(V3 a, V3 b); V3 v3scalef(V3 a, F32 s); V3 v3scale(V3 a, V3 s); F32 v3dot(V3 a, V3 b); V3 v3cross(V3 l, V3 r); F32 v3len2(V3 a); F32 v3len(V3 a); V3 v3norm(V3 a); void v3print(V3 a); V4 v4(F32 x, F32 y, F32 z, F32 w); V4 v4a(F32 x); V4 v4fromv3(V3 a); V4 v4inv(V4 a); V4 v4add(V4 a, V4 b); V4 v4sub(V4 a, V4 b); V4 v4scalef(V4 a, F32 s); V4 v4scale(V4 a, V4 s); F32 v4dot(V4 a, V4 b); F32 v4len2(V4 a); F32 v4len(V4 a); V4 v4norm(V4 a); void v4print(V4 a); /* NOTE(pryazha): Matrices */ F32 mat4det(MAT4 m); MAT4 mat4transp(MAT4 m); MAT4 mat4mul(MAT4 left, MAT4 right); MAT4 mat4transl(MAT4 m, V3 v); MAT4 mat4scale(MAT4 m, V3 v); MAT4 mat4_change_basis(V3 x, V3 y, V3 z); /* NOTE(pryazha): Angles in degrees */ MAT4 mat4rotate(MAT4 m, V3 angles); V4 mat4v4mul(MAT4 m, V4 v); void mat4print(MAT4 m); #endif /* PRB_MATH_H */