bool Intersect(const Circle& c, const Line& l) { Vector2 startToCenter = c.center - l.from; Vector2 startToEnd = l.to - l.from; float len = startToEnd.Magnitude(); Vector2 dir = startToEnd / len; // Find the closest point to the line segment float projection = Dot(startToCenter, dir); Vector2 closestPoint; if (projection > len) { closestPoint = l.to; } else if (projection < 0.0f) { closestPoint = l.from; } else { closestPoint = l.from + (dir * projection); } // Check if the closest point is within the circle Vector2 closestToCenter = c.center - closestPoint; if (closestToCenter.MagnitudeSqr() > c.radius * c.radius) { return false; } return true; }