From 7cb810089144d42d202e0b267235174d7869c5aa Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Fri, 10 Oct 2025 11:29:09 +0200 Subject: checkpoint --- code/libs/handmade_math.h | 236 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 code/libs/handmade_math.h (limited to 'code/libs/handmade_math.h') diff --git a/code/libs/handmade_math.h b/code/libs/handmade_math.h new file mode 100644 index 0000000..fd294d4 --- /dev/null +++ b/code/libs/handmade_math.h @@ -0,0 +1,236 @@ +/* date = June 10th 2025 1:05 pm */ + +#ifndef HANDMADE_MATH_H +#define HANDMADE_MATH_H + + +union v2 +{ + struct + { + r32 X, Y; + }; + r32 E[2]; +}; + +inline v2 +V2(r32 X, r32 Y) +{ + v2 Result; + + Result.X = X; + Result.Y = Y; + + return(Result); +} + +inline v2 +operator-(v2 A) +{ + v2 Result; + + Result.X = -A.X; + Result.Y = -A.Y; + + return Result; +} + +inline v2 +operator+(v2 A, v2 B) +{ + v2 Result; + + Result.X = A.X + B.X; + Result.Y = A.Y + B.Y; + + return Result; +} + +inline v2 +operator+(v2 A, r32 B) +{ + v2 Result; + + Result.X = A.X + B; + Result.Y = A.Y + B; + + return Result; +} + +inline v2 +operator-(v2 A, v2 B) +{ + v2 Result; + + Result.X = A.X - B.X; + Result.Y = A.Y - B.Y; + + return Result; +} + +inline v2 +operator-(v2 A, r32 B) +{ + v2 Result; + Result = A + -B; + return Result; +} + +inline v2 +operator*(r32 A, v2 B) +{ + v2 Result; + + Result.X = A*B.X; + Result.Y = A*B.Y; + + return Result; +} + +inline v2 +operator*(v2 A, r32 B) +{ + return B*A; +} + +inline v2 +operator/(v2 A, r32 B) +{ + v2 Result; + + Result.X = A.X/B; + Result.Y = A.Y/B; + + return Result; +} + +inline v2 & +operator*=(v2 &A, r32 B) +{ + A = B * A; + return A; +} + +inline v2 & +operator+=(v2 &A, v2 B) +{ + A = A + B; + return A; +} + +inline +r32 Square(r32 A) +{ + r32 Result = A*A; + return Result; +} + +inline +r32 Inner(v2 A, v2 B) +{ + r32 Result = A.X*B.X + A.Y*B.Y; + return Result; +} + +inline +r32 LengthSq(v2 A) +{ + r32 Result = Inner(A, A); + return Result; +} + +//- v3 +struct v3 +{ + union + { + struct + { + r32 R; + r32 G; + r32 B; + }; + r32 E[3]; + }; +}; +#define v3(A) v3{(A), (A), (A)} + +inline v3 +operator*(v3 A, r32 B) +{ + v3 Result; + + Result.R = A.R * B; + Result.G = A.G * B; + Result.B = A.B * B; + + return Result; +} + +inline v3 +operator*(r32 A, v3 B) +{ + v3 Result = B*A; + + return Result; +} + +inline v3 +operator+(v3 A, r32 B) +{ + v3 Result; + + Result.R = A.R + B; + Result.G = A.G + B; + Result.B = A.B + B; + + return Result; +} + +inline v3 +operator+(r32 A, v3 B) +{ + v3 Result = B+A; + + return Result; +} + +inline v3 +operator-(v3 A) +{ + v3 Result; + + Result.R = -A.R; + Result.G = -A.G; + Result.B = -A.B; + + return Result; +} + +inline v3 +operator+(v3 A, v3 B) +{ + v3 Result; + + Result.R = A.R + B.R; + Result.G = A.G + B.G; + Result.B = A.B + B.B; + + return Result; +} + +inline v3 & +operator+=(v3 &A, v3 B) +{ + A = A + B; + return A; +} + +inline v3 & +operator+=(v3 &A, r32 B) +{ + A = A + B; + return A; +} + +#endif //HANDMADE_MATH_H -- cgit v1.2.3-70-g09d2