diff --git a/include/window.h b/include/window.h
index 6263cfd..e2a958e 100644
--- a/include/window.h
+++ b/include/window.h
@@ -80,5 +80,7 @@ void draw_rect(const window *wnd, rect rec, colour colour);
 void fill_triangle(const window *wnd, triangle triangle, colour colour);
 void fill_quad(const window *wnd, quad qd, colour colour);
 void fill_rect(const window *wnd, rect rec, colour colour);
+line line_from_origin(point origin, f64 angle, i32 line_length);
+bool aabb(rect rec, i32 x, i32 y);
 
 #endif // !WINDOW_H
diff --git a/src/window.c b/src/window.c
index cdf38c0..e16267c 100644
--- a/src/window.c
+++ b/src/window.c
@@ -162,6 +162,24 @@ void fill_quad(const window *wnd, quad qd, colour colour) {
   fill_triangle(wnd, t1, colour);
 }
 
+line line_from_origin(point origin, f64 angle, i32 line_length) {
+  f64 rad = radians(angle);
+  f64 direction = angle / absolute(angle) * -1;
+
+  i32 adjacent = line_length * cos(rad) * direction; // dx
+  i32 opposite = line_length * sin(rad) * direction; // dy
+
+  return (line){
+      (point){origin.x + adjacent, origin.y + opposite},
+      origin,
+  };
+}
+
+bool aabb(rect rec, i32 x, i32 y) {
+  return x > rec.topleft.x && x <= rec.topleft.x + rec.w && y > rec.topleft.y &&
+         y <= rec.topleft.y + rec.h;
+}
+
 internal inline bool inside_triangle(triangle tri, point p) {
   // Based on the following video:
   // https://www.youtube.com/watch?v=HYAgJN3x4GA