circleToRect static method

bool circleToRect(
  1. Circle circle,
  2. AABB rect, {
  3. Vec2? out,
})

Implementation

static bool circleToRect(Circle circle, AABB rect, {Vec2? out}) {
  final closest = Vec2(
    circle.x.clamp(rect.left, rect.right),
    circle.y.clamp(rect.top, rect.bottom),
  );

  final dx = circle.x - closest.x;
  final dy = circle.y - closest.y;
  final magSq = dx * dx + dy * dy;

  double diff = circle.radSq - magSq;
  if (diff <= 0) return false;

  if (out != null) {
    final mag = sqrt(magSq);
    if (mag == 0) return true;
    diff = circle.radius - mag;
    out.x = (dx / mag) * diff;
    out.y = (dy / mag) * diff;
  }

  return true;
}