Напишите одну функцию, которая проверяет, что произвольный отрезок ab пересекает круг C. Напишите вторую функцию, которая проверяет, находится ли точка p внутри круга C. Затем вызовите 1-ю функцию четыре раза, для четырех сторон прямоугольника, и если все это не удастся, вызовите вторую функцию на одном углу (чтобы проверить, полностью ли прямоугольник внутри круга). В зависимости от вашего определения «столкновения» вам может потребоваться также проверить, полностью ли круг внутри прямоугольника!
Существуют различные способы ускорения вычислений, если вы собираетесь использовать эти миллионы раз в режиме реального времени. Наиболее очевидным является первая проверка на квадрат S, ограничивающий круг C, и только затем перейдите к (слегка) более дорогому круговому тесту.
посмотреть здесь: http://stackoverflow.com/questions/401847/circle-rectangle-collision-detection-intersection – tokland