@Rillai

Как вычислить столкновение круга с другим объектом?

Доброго времени суток. Делаю платформер, и дошло до разработки коллайдеров, пересечений. Перед мной встал вопрос. Я могу вычислить сталкиваются ли объекты с прямыми линиями, но как быть с кругом, то есть, например, как понять, касается ли край круга стороны квадрата? Накиньте пожалуйста материла по этому поводу, ткните в геометрию за 8 класс :D
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
@MamaLuyba
Вообще, много где об этом написано в книгах по разработке игр на 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);
};
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
В геометрии нет такого понятия как объект. Какую геометрическую фигуру вы хотите столкнуть с кругом?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы