#geometry #collision
#геометрия #столкновение
Вопрос:
у меня следующая ситуация: круг движется линейно к неподвижному прямоугольнику. Есть ли эффективный способ вычислить положение круга, когда он касается прямоугольника?
Мне это нужно для обработки столкновений. Круги должны двигаться как можно ближе к прямоугольнику, а не просто останавливаться, если движение приведет к пересечению. Я смог решить проблему с кругом, движущимся к другому кругу, поскольку вы можете просто использовать уравнение перемещения плюс радиусы. Но с прямоугольниками я на данный момент не имею ни малейшего представления о том, как его (эффективно) вычислить без двоичного поиска по траектории круга.
Комментарии:
1. Траектория наклонная?
2. ДА. И я думаю, что нашел способ его вычислить. Вам просто нужно найти вектор, ортогональный стороне прямоугольника, к которому будет прикасаться круг. Вектор должен начинаться со стороны прямоугольника и заканчиваться линией траектории круга. Когда длина вектора равна радиусу окружности, у вас есть положение окружности, когда она попадает в прямоугольник.
3. Есть и другие случаи, см. Мой ответ.
Ответ №1:
Чтобы решить эту проблему, вы можете представить, что круг сдувается до одной точки, в то время как прямоугольник раздувается и превращается в прямоугольник со скругленными углами. Теперь вам нужно пересечь траекторию центра с этой фигурой.
Теперь вам нужно проверить, пересекает ли луч прямой край раздутого прямоугольника (что легко, проверьте, находятся ли конечные точки с обеих сторон) или одну из дуг в углах (что менее просто: используя параметрическое уравнение луча и неявное уравнение окружностей,вы получаете квадратные уравнения, и вы должны исключить решения, которые не находятся в правом квадранте).
Это требует немного аналитической геометрии, но вполне выполнимо. Обратите внимание, что это указывает вам положение центра, когда есть контакт, но, продолжая движение по длине R вдоль луча, вы получаете точку контакта.