From 52d43a63d02e973f28aa30b768eddc042a4f155b Mon Sep 17 00:00:00 2001
From: Matthew Kosarek 
Vector2 getProjection(Vector2* vertices, int numVertices, Vector2 axis) {
+    // Find the min and max vertex projections
+    float32 min = axis.dot(vertices[0]);
+    float32 max = min;
+
+    for (int v = 1; v < numVertices; v++) {
+        float32 d = axis.dot(vertices[v]);
+
+        if (d < min) {
+            min = d;
+        } else if (d > max) {
+            max = d;
+        }
+    }
+
+    return Vector2 { min, max };
+}
+
+bool projectionsOverlap(Vector2 first, Vector2 second) {
+    return first.x <= second.y && second.x <= first.y;
+}
+
+bool doIntersect(ConvexPolygon* first, ConvexPolygon* second) {
+    IntersectionResult ir;
+
+    // Check agaisnt the edges of the first polygon
+    for (int i = 0; i < first->numVertices; i++) {
+        Vector2 normal = first->edges[i].normal;
+
+        Vector2 firstProj = getProjection(first->transformedVertices, first->numVertices, normal);
+        Vector2 secondProj = getProjection(second->transformedVertices, second->numVertices, normal);
+
+        if (!projectionsOverlap(firstProj, secondProj)) {
+            return false;
+        }
+    }
+
+    // Check against the edges of the second polygon
+    for (int i = 0; i < second->numVertices; i++) {
+        Vector2 normal = second->edges[i].normal;
+
+        Vector2 firstProj = getProjection(first->transformedVertices, first->numVertices, normal);
+        Vector2 secondProj = getProjection(second->transformedVertices, second->numVertices, normal);
+
+        if (!projectionsOverlap(firstProj, secondProj)) {
+            return false;
+        }
+    }
+
+    return true;
+}
+- Now that we know our objects have intersecting, we want to be able to send them tumbling away from each other to simulate a collision. To do this, we will need to find the following things: + Now that we know our objects have intersected, we want to be able to send them tumbling away from each other to simulate a collision. To do this, we will need to find the following things: