Я пишу программное обеспечение, которое расширяет Circle-Rectangle collision detection (intersection), чтобы включить ответы на столкновение. Круг и край прямоугольника довольно прямолинейны. Но круговой круг меня озадачил.Разрешение столкновений круглых кругов
Например, пусть два круга сталкиваются, один красный и один зеленый, в моделировании дискретных событий. Мы могли бы иметь следующую ситуацию:
Сразу после того, как они сталкиваются, мы могли бы иметь:
Здесь RIP и GIP были места окружностей на предыдущем такте. При текущем такте отслеживания столкновение обнаруживается при RDP и ВВП. Тем не менее, столкновение произошло между часами, когда два круга были на RCP и GCP. При тактировании часов красный круг перемещается в направлении RVy вниз и RVx вправо; зеленый круг движется GVy вниз и GVx влево. RVy не равно GVy; и RVx не равняется GVx.
столкновение происходит тогда, когда расстояние между круговыми центрами меньше или равно сумме радиусов окружностей, то есть, на предыдущем рисунке, д < = (Rr + Гр). При столкновении, где d < (Rr + Gr), мы должны поместить DP обратно в CP, прежде чем настраивать компоненты скорости кругов. В случае d == (Rr + Gr) перепозиционирование не требуется, поскольку DP находятся в CP.
В этом и заключается проблема: как мне сделать переход обратно к CP. Некоторые авторы предположили, что необходимо использовать половину проникновения, заданного p на следующем рисунке.
Для меня это просто неправильно. Он предполагает, что векторы скорости двух окружностей равны, что в этом примере не так. Я думаю, что проникновение имеет какое-то отношение к вычислению, но как ускользает от меня. Я знаю, что проблема может быть переделана как проблема правильных похожих треугольников, в которых мы хотим решить для Gcdy и GCdx.
Само столкновение будет смоделирована как упругое и математике для обмена инертности уже на месте. Единственная проблема заключается в том, где позиционировать круги при столкновении.
Какое столкновение вы ищете? Эластичность (без потери энергии)? Неупругое (потеря энергии)? Два круга склеиваются и продолжают двигаться как пара? – John
Этот вопрос, кажется, не по теме, потому что речь идет о физике, а не о программировании. – tom10
@john Коллизия будет смоделирована как эластичная. Математика для обмена инерцией уже установлена. Проблема заключается в том, где размещать круги. – Gus