Вообще, много где об этом написано в книгах по разработке игр на js. Если не путаю, то я применял метод, связанный с вычислением расстояния от центра окружности до объекта, ну и если расстояние было <= радиусу, то произошло столкновение.
Пример из книжки "Build your own 2D Game Engine and Create Great Web Games(Apress,2015)" (я не по ней делал, но вроде то же принцип)
RigidShape.prototype.collidedRectCirc = function(rect1Shape, circ2Shape) {
var rect1Pos = rect1Shape.getPosition();
var circ2Pos = circ2Shape.getPosition();
if (rect1Shape.containsPos(circ2Pos) || (circ2Shape.containsPos(rect1Pos))) {
return true;
}
var vFrom1to2 = [0, 0];
vec2.subtract(vFrom1to2, circ2Pos, rect1Pos);
var vec = vec2.clone(vFrom1to2);
var alongX = rect1Shape.getWidth() / 2;
var alongY = rect1Shape.getHeight() / 2;
vec[0] = this.clamp(vec[0], -alongX, alongX);
vec[1] = this.clamp(vec[1], -alongY, alongY);
var normal = [0, 0];
vec2.subtract(normal, vFrom1to2, vec);
var distSqr = vec2.squaredLength(normal);
var rSqr = circ2Shape.getRadius() * circ2Shape.getRadius();
return (distSqr < rSqr);
};