public static bool polyCollision(PhysicsPoly cPoly1, PhysicsPoly cPoly2) { // Some Values. double cPoly1DistanceToFarthestPoint = 0; double cPoly2DistanceToFarthestPoint = 0; // Get Our center Points Point cPoly1CenterPoint = new Point(0, 0); Point cPoly2CenterPoint = new Point(0, 0); // Calculate our furthest point for Poly1 for (int i = 0; i < cPoly1.mAttachablePoly.vertices; i++) { double MyPoint = cPoly1.mAttachablePoly.p[i].DistanceTo(cPoly1CenterPoint); if (MyPoint > cPoly1DistanceToFarthestPoint) cPoly1DistanceToFarthestPoint = MyPoint; } // Calculate our furthest point for Poly2 for (int i = 0; i < cPoly2.mAttachablePoly.vertices; i++) { double MyPoint = cPoly2.mAttachablePoly.p[i].DistanceTo(cPoly2CenterPoint); if (MyPoint > cPoly2DistanceToFarthestPoint) cPoly2DistanceToFarthestPoint = MyPoint; } // these two are defined above differenceX = cPoly2.x - cPoly1.x; differenceY = cPoly2.y - cPoly1.y; double differenceSquared = differenceX * differenceX + differenceY * differenceY; if (Math.Pow(differenceSquared, .5) - cPoly1DistanceToFarthestPoint - cPoly2DistanceToFarthestPoint < 0) { // More CPU accurate Check. return true; } else return false; }