Как вычислить наличие препятствий на пути в 2d мире?

Есть массив 2d объектов (в основном прямоугольники и квадраты).

Нужно вычислить есть ли на пути движения снаряда один из объектов.

Сейчас я проверяю наличие объектов в треугольнике ABC, где медиана AM — и есть путь движения снаряда.
За угол А я взял 30°.

Проблема в том, что объекты двухмерные и имеют различную ширину и длину.
Алгоритм ошибается в ситуации когда объект слишком широкий, но его центр выходит за площадь треугольника.

Думал насчет равномерного нанесения на путь точек и проверке вхождения объекта в эти точки, но у меня нет опыта в этой обрасти.

Как правильно решить данную задачу?
  • Вопрос задан
  • 3997 просмотров
Пригласить эксперта
Ответы на вопрос 2
SLY_G
@SLY_G
журналист, переводчик, программист, стартапщик
Смотря как они заданы. Возможно, наипростейший способ — посчитать, пересекается ли отрезок «начало полета снаряда — конец полета снаряда» с каждой из сторон 2d-объектов. Если пересекается, то кирдык. Надо только решить, что делать, если этот отрезок пересекает вершину препятствия.
Нужно взять уравнение прямой отрезка полёта снаряда, и проверить, не лежит ли какая-то из сторон многоугольников, ограничивающих 2d-препятствия, в разных полуплоскостях от этой прямой. Если да, то есть пересечение.
По-моему это перемножением векторов делается, но могу и ошибаться, надо погуглить.
Ответ написан
EndUser
@EndUser
Можно и collision detection, наверное. Сначала проверка столкновения с «конвертом», затем с самим объектом.
Ответ написан
Ваш ответ на вопрос

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

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