Столкновение шара диаметром с наклонной стенкой/плоскостью в 2D системе координат

Учитывая положение мяча, диаметр, направление/целевое положение и 4 края прямоугольника (соотношение 2:1), как я могу найти конечное положение (координаты точки) мяча, если он сталкивается с одним из стены? Есть ли какая-нибудь формула или более простой метод, чем мой? И как диаметр изменит результат (ударяется о стену в другом положении => оказывается в другом положении, но я не знаю, как его найти)?

Пример данного поля, мяча и цели

Вот решение, о котором я подумал ( диаметр = 0 ):

  1. Создайте линии поля
  2. Создайте линию движения мяча
  3. Проверьте, встречаются ли и где линия движения мяча с одной из линий поля (найдите точную точку) (используя эту формулу )
  4. Найдите перпендикулярную линию к линии поля, которая пересекает ее в точке попадания в стену (шаг 3).
  5. Найдите линию, параллельную стене поля, пересекающую положение мяча.
  6. Найдите зеркальную точку положения мяча и перпендикулярную линию (линия 4-го шага)
  7. Создайте линию из зеркальной точки (шаг 6) и точки попадания в стену (шаг 3)
  8. Рассчитать расстояние между позицией мяча и целью
  9. Вычтите расстояние между положением мяча и ударом о стену (шаг 3) из положения мяча и цели (используя эту формулу , чтобы найти остаток
  10. Проверьте, не ударит ли остаток о другую стену, и повторите шаги 4–9.
  11. Используя ту же формулу из шага 9, добавив ее к позиции удара о стену (шаг 3), найдите точку, в которой мяч закончится.

Мое решение

Редактировать: Извините, если это неправильное место для публикации (может быть, я должен был опубликовать это в https://physics.stackexchange.com/ ?)

Непонятно, что вы подразумеваете под "конечной позицией". В любом случае ваш метод правильный. Работать с ненулевым диаметром легко: просто рассмотрите меньший прямоугольник с тем же центром и ориентацией, но стороны которого на диаметр меньше.
@Intelligentipauca под конечной позицией я имею в виду координаты точки, в которой остановится мяч. «рассмотрите меньший прямоугольник» - Да, я думал об этом, но как я могу это реализовать, поскольку поле наклонено, а не параллельно осям x и y?
Но где остановится мяч? Есть какое-то трение или что-то другое?
Если мяч останавливается после того, как он проходит расстояние, равное расстоянию до цели, то существует гораздо более простой способ вычисления конечного положения.
@Intelligentipauca да, это останавливает трение, не учитывается, как и другие факторы. Это больше похоже на то, что мяч попадает в цель, если его путь проходит через стену, а затем он меняет направление, пока не пройдет заданное расстояние. Можете ли вы показать мне простой метод?
@Intelligentipauca, например, позволяет сказать, что поля простые (параллельные осям x и y) (0,0) (320,0) (320,160) (0,160) мяч находится в (10,10), если цель (30,30) ) и, допустим, задана мощность, например 2, мяч пройдет двойное целевое расстояние, поэтому (50,50) и не столкнется со стеной, поэтому конечное положение будет (60,60). Другой пример: мяч находится в точке (20,20), цель равна (20,10), мощность 2, поэтому он движется к (20,10), затем к (20,0) и сталкивается со стеной. Если диаметр = 0, конечное положение находится на стене. Например, если диаметр равен 10, он будет равен (20,10) (координаты центральной точки).

Ответы (1)

Допустим, у нас есть точечный шар внутри прямоугольника (поля). Мяч будет перемещаться из своей начальной точки в какую-то другую точку (цель Т ), но если его путь пересекает сторону прямоугольника, то он отскакивает назад, и так продолжается до тех пор, пока общая длина его пути не станет такой же, как расстояние от начала до цели.

Предположим, что поле — это просто квадрат [ 0 , 1 ] × [ 0 , 1 ] . Если отразить цель о левую или нижнюю стену, цель просто изменит знак своей Икс или у координировать. Если он отразится о правую или верхнюю стену, его координаты переключатся на 2 Икс или 2 у .

Отсюда простой алгоритм нахождения конечного положения шара: если координата Икс или у целевого значения отрицательно, замените его на Икс или у ; если координата Икс или у цели больше, чем 1 , замените его на 2 Икс или 2 у ; остановить, когда обе координаты находятся в диапазоне 0 Икс , у 1 .

Давайте сделаем пример. Если цель находится на ( 3.3 , 0,8 ) у вас есть:

( 3.3 , 0,8 ) ( 1,3 , 0,8 ) ( 1,3 , 0,8 ) ( 0,7 , 0,8 )
последняя точка является конечным положением мяча. Обратите внимание, что фактический путь зависит от начальной точки (см. рисунок ниже), а конечная точка — нет, и ее можно найти с помощью приведенного выше алгоритма.

введите описание изображения здесь

Если поле представляет собой обычный прямоугольник А Б С Д , то мы можем переназначить его на единичный квадрат следующим образом. Выберите одну из вершин в качестве источника (например, А ) и взять в качестве координатных векторов

ты "=" Б А , в "=" Д А .
Теперь вы можете записать относительное положение цели как Т А "=" α ты + β в и применим приведенный выше алгоритм к координатам ( α , β ) . На самом деле, вы можете проверить это с помощью этих новых координат А "=" ( 0 , 0 ) , Б "=" ( 1 , 0 ) и так далее. Как только окончательная позиция найдена, мы можем вернуться из ( α , β ) координаты настоящие.

Пример. Если мы возьмем ситуацию, описанную на вашей картинке , мы имеем, например:

ты "=" ( 100 , 100 ) , в "=" ( 50 , 50 )
и Т А "=" ( 20 , 10 ) "=" 0,15 ты 0,1 в . Следовательно ( α , β ) координаты цели есть ( 0,15 , 0,1 ) и приведенный выше алгоритм останавливается только после одного шага:
( 0,15 , 0,1 ) ( 0,15 , 0,1 ) .
The ( α , β ) координаты конечного положения Ф тогда ( 0,15 , 0,1 ) и мы можем перевести их в реальные координаты следующим образом:
Ф "=" 0,15 ты + 0,1 в + А "=" ( 10 , 20 ) + А "=" ( 30 , 30 ) .

РЕДАКТИРОВАТЬ.

Если мяч имеет радиус р > 0 , то мы можем восстановить описанный выше случай (где мы предполагали р "=" 0 , т.е. точечный шар) путем сжатия исходного прямоугольника А Б С Д в другой прямоугольник А Б С Д , лежащий внутри А Б С Д и имеющие свои стороны на расстоянии р со стороны А Б С Д . Нетрудно найти координаты вершин такого прямоугольника:

А "=" А + р ты | ты | + р в | в | , Б "=" Б р ты | ты | + р в | в | , С "=" С р ты | ты | р в | в | , Д "=" Д + р ты | ты | р в | в | ,
где ты , в определяются, как указано выше, и | ты | , | в | длины векторов.

Как только новый прямоугольник получен, можно повторить описанный ранее алгоритм.

Давайте покажем, как это работает, на том же примере, что и раньше (ваша картинка), но с шаром радиуса р "=" 10 . Используя значения, вычисленные выше, легко найти новые вершины:

А "=" ( 20 , 10 + 10 2 ) , Б "=" ( 120 10 2 , 110 ) , С "=" ( 70 , 160 10 2 ) , Д "=" ( 10 2 30 , 60 ) ,
и новые координатные векторы:
ты "=" ( 100 10 2 , 100 10 2 ) , в "=" ( 10 2 50 , 50 10 2 ) .
Тогда мы имеем:
Т А "=" 3 98 ( 10 + 2 ) ты + 1 2 5 в .
Первая координата находится в диапазоне [ 0 , 1 ] , а второй отрицательный. Окончательное положение таково:
3 98 ( 10 + 2 ) ты 1 2 5 в + А "=" ( 40 , 10 ( 5 + 2 ) ) .

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .