У меня возникли проблемы с предотвращением столкновений без выравнивания, что, как мне кажется, является редким случаем. Я установил два объекта, чтобы они двигались навстречу друг другу, но с небольшим смещением, поэтому один из объектов двигается немного вверх, а один из объектов движется немного вниз.
В моем не выровненном алгоритме управления предотвращением столкновений я нахожу точки на передней линии объекта и передней линии другого объекта, где эти две линии являются самыми близкими. Если эти ближайшие точки находятся в пределах расстояния, позволяющего избежать столкновения, и если расстояние между ними меньше двух радиусов ограничивающих сфер двух объектов, то объекты должны отклоняться в соответствующем направлении.
Проблема в том, что в моем случае ближайшие точки на линиях рассчитываются так, чтобы они находились очень далеко от фактической точки столкновения. Это потому, что две передние линии для каждого объекта удаляются друг от друга, когда объекты проходят. Проблема в том, что из-за этого рулевое управление не происходит, и два объекта частично сталкиваются.
У кого-нибудь есть какие-либо предложения относительно того, как правильно рассчитать точку столкновения? Возможно, как-то принимая во внимание размер двух объектов?
источник
Ответы:
Это, безусловно, лучшая статья по обнаружению столкновений между мячами, с которой я сталкивался.
Уроки в бильярдном зале: быстрое и точное обнаружение столкновений между кругами или сферами
источник
Вы не хотите найти ближайшую точку.
Вы хотите найти точку на линиях, где расстояние равно объединенным радиусам обеих сфер.
источник
Если я правильно понимаю ваш вопрос, вы можете просто использовать тест пересечения Сфера и Сфера, как предложил AttackingHobo.
Математика для такого теста следующая (поправьте меня, если я ошибаюсь, это было какое-то время). Кроме того, это с учетом того, что ваши сферы имеют центр и переменную радиуса каждая.
Формула для проверки выглядит примерно так:
У вас есть сфера против пересечения сферы. Это довольно просто, давайте посмотрим, как это выглядит в коде!
Опять же, я думаю, что это правильный ответ, который вы, возможно, ищете. Если кто-то знает, что это не так, пожалуйста, поправьте меня, так как я уже давно занимался этой математикой.
источник
Хорошо, надеюсь, это имеет смысл ... Получите векторы шаров и вычислите их точку столкновения, назовите это p1. Найдите угол между двумя векторами, назовите это a1. При a1 / 2 нарисуйте линию, она будет точно посередине в градусах между двумя векторами. Вам нужно место на этой линии, где sin (a1 / 2) = (radius1 + radius2) / 2. Если эта картинка визуализируется в моей голове справа, то здесь происходит столкновение. Извините, если это не так ... уже поздно.
источник