diff options
Diffstat (limited to 'code/handmade_math.h')
-rw-r--r-- | code/handmade_math.h | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/code/handmade_math.h b/code/handmade_math.h new file mode 100644 index 0000000..98b2328 --- /dev/null +++ b/code/handmade_math.h @@ -0,0 +1,134 @@ +/* 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*(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; +} + +#endif //HANDMADE_MATH_H |