Обозначим четыре стороны прямоугольника s1, s2, s3, s4
, начиная сверху и двигаясь по часовой стрелке.
Проверьте расстояние от центра круга до каждой из четырех линий; d1, d2, d3, d4
(пронумеровано по бокам). Обратите внимание, что существует простая формула для вывода (ортогонального) расстояния от точки до линии.
Необходимые (хотя и не достаточное) условие является то, что расстояние от одной из линий является длиной радиуса (прагматично разница меньше, чем какая-то дельта по вашему выбору):
|d1 - r| < delta || ...
Вы можете сделать это достаточное условие, если круг полностью внутри прямоугольник, который является истинным тогда и только тогда каждым расстояние меньше, чем расстояние между соответствующими сторонами прямоугольника, меньше радиуса:
d1 <= |s1 - s3|-r && d2 <= |s2 - s4|-r && ...
проверкой частично снаружи так же просто, как проверка для напротив последнего абзаца (и если требуется, проверить, что радиус еще в коробке):
d1 > |s1 - s3|-r || d2 > |s2 - s4|-r || ...
возможно дубликат [Расчет столкновения для движущегося круга, без перекрытия границ] (HTTP: // StackOverflow .com/questions/2751377/calculating-collision-for-a-moving-circle-without-overlapping-the-limits) – finnw