AABB — быстрый, но у него слабое место: он прямоугольный.
Пуля, мяч, персонаж в top-down — у них нет углов. AABB даёт ложные
столкновения в углах, которых визуально нет.
Circle решает это элегантно. Проверка столкновения двух окружностей —
одно вычитание и одно сравнение:
bool CirclesOverlap(Vector2 posA, float rA, Vector2 posB, float rB)
{
float dx = posA.x - posB.x;
float dy = posA.y - posB.y;
float distSq = dx * dx + dy * dy; // квадрат расстояния
float radiusSum = rA + rB;
return distSq < radiusSum * radiusSum; // без корня — быстрее
}
Никакой тригонометрии. Корень не нужен — сравниваем квадраты.
Когда выбирать Circle:
• снаряды (пули, фаерболы) — форма симметрична
• мячи, монеты, бонусы — очевидно
• персонажи в top-down — нет чёткой «передней» стороны
Когда выбирать AABB:
• платформы, стены, тайлы — прямоугольные по природе
• хитбоксы, которые должны «прижиматься» к форме спрайта
На практике движки используют их вместе: AABB — быстрая первичная
проверка (broad phase), Circle или Polygon — точная (narrow phase).
#мат_геймдев #МатРазбор #физика #коллайдеры