diff options
Diffstat (limited to 'libs/pwyazh/v3f.h')
-rw-r--r-- | libs/pwyazh/v3f.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/libs/pwyazh/v3f.h b/libs/pwyazh/v3f.h new file mode 100644 index 0000000..ba2e140 --- /dev/null +++ b/libs/pwyazh/v3f.h @@ -0,0 +1,111 @@ +#ifndef V3F_H +#define V3F_H + +V3F +v3f(F32 x, F32 y, F32 z) +{ + V3F result = { x, y, z }; + return(result); +} + +V3F +v3f_zero() +{ + V3F result = { 0.0f, 0.0f, 0.0f }; + return(result); +} + +V3F +v3f_one() +{ + V3F result = { 1.0f, 1.0f, 1.0f }; + return(result); +} + +V3F +v3f_negate(V3F a) +{ + V3F result = { -a.x, -a.y, -a.z }; + return(result); +} + +V3F +v3f_add(V3F a, V3F b) +{ + V3F result = { a.x+b.x, a.y+b.y, a.z+b.z }; + return(result); +} + +V3F +v3f_sub(V3F a, V3F b) +{ + V3F result = { a.x-b.x, a.y-b.y, a.z-b.z }; + return(result); +} + +V3F +v3f_scalef(V3F a, F32 scale) +{ + V3F result = { a.x*scale, a.y*scale, a.z*scale }; + return(result); +} + +V3F +v3f_scalev(V3F a, V3F scale) +{ + V3F result = { a.x*scale.x, a.y*scale.y, a.z*scale.z }; + return(result); +} + +F32 +v3f_length2(V3F a) +{ + F32 result = a.x*a.x+a.y*a.y+a.z*a.z; + return(result); +} + +F32 +v3f_length(V3F a) +{ + F32 result = f32_sqrt(v3f_length2(a)); + return(result); +} + +V3F +v3f_norm(V3F a) +{ + F32 length = v3f_length(a); + V3F result = v3f_zero(); + if (length) { + result = v3f(a.x/length, a.y/length, a.z/length); + } + return(result); +} + +V3F +v3f_dot(V3F a, V3F b) +{ + V3F result; + result.x = a.x*b.x; + result.y = a.y*b.y; + result.z = a.z*b.z; + return(result); +} + +V3F +v3f_cross(V3F left, V3F right) +{ + V3F result; + result.x = (left.y*right.z-right.y*left.z); + result.y = (right.x*left.z-left.x*right.z); + result.z = (left.x*right.y-right.x*left.y); + return(result); +} + +void +v3f_print(V3F a) +{ + printf("[%4.4f\n%4.4f\n%4.4f]\n\n", a.x, a.y, a.z); +} + +#endif /* V3F_H */ |