public static CCPoint GetSeparationVector(Circle circle, Polygon polygon) { bool isCircleCenterInPolygon = polygon.IsPointInside( circle.PositionWorldspace.X, circle.PositionWorldspace.Y); float distance; var normal = polygon.GetNormalClosestTo(circle.PositionWorldspace, out distance); if (isCircleCenterInPolygon) { distance += circle.Radius; } else { distance = circle.Radius - distance; } // increase the distance by a small amount to make sure that the objects do separate: distance += .5f; var separation = normal * distance; return separation; }