Мне нужно освежить мою тригонометрию и надеюсь, что вы можете помочь здесь с простой математической моделью. Здесь моя модель пока что на картинке прилагается. Я знаю, что у анимации кадров есть другие проблемы, когда шар движется очень быстро, но сейчас мне просто нужно вычислить ballDx и ballDy. Также возможно, что ballDx = 0 (только вертикальное движение), но когда шар отклоняется, ballDx может получить другое значение.
46
Ответы:
Примечание: Все нижеприведенное предполагает, что поверхность шара не имеет трения (поэтому он не начнет вращаться или отскакивать по-другому, потому что это так).
В момент столкновения мяч будет касаться угла. Когда твердые объекты сталкиваются, сила действует на так называемую нормаль поверхности, то есть перпендикулярно поверхности в точке столкновения.
Поскольку это шар, перпендикулярно поверхности к центру шара. Итак, мы знаем направление силы, как насчет ее величины? Предполагая упругое столкновение (и то, что прямоугольник не может двигаться), шар должен отскочить с той же скоростью, с которой он воздействовал.
Пусть (nDx, nDy) - скорость после столкновения, (oDx, oDy) - скорость до столкновения и (x, y) - положение шара в точке столкновения. Далее предположим, что угол, с которым сталкивается шар, находится в точке (0,0).
Выражая наши идеи в виде формул, мы имеем:
Что эквивалентно:
Подставляя первые два уравнения в последнее, получим:
Расширение с использованием биномиального тора
выходы:
Это квадратное уравнение для
c
имеет два решения, одно из которых равно 0. Очевидно, что это не то решение, которое нас интересует, так как обычно направление шара изменится в результате столкновения. Чтобы получить другое решение, мы делим обе стороны на c и получаем:Это:
Подводя итог, мы имеем:
Редактировать : В коде:
Несколько соображений по реализации: Хотя вы можете приблизить (x, y) положение шара после шага симуляции, это приближение изменит угол отклонения и, следовательно, будет очень заметным, поэтому ваши шаги симуляции должны быть очень хорошими (возможно, такими, чтобы мяч не перемещается более чем на 1/20 своего диаметра за шаг). Для более точного решения вы можете вычислить время, когда происходит столкновение, и разделить этот шаг моделирования в это время, то есть сделать частичный шаг до точки столкновения и еще один частичный шаг для оставшейся части шага.
Редактировать 2: Вычисление точки удара
Пусть r - радиус, (x0, y0) положение и (dx, dy) скорость шара в начале шага моделирования. Для простоты давайте далее предположим, что рассматриваемый угол расположен в точке (0,0).
Мы знаем:
Мы хотим
Это
Это квадратное уравнение в т. Если его дискриминант
отрицательно, у него нет решений, то есть мяч никогда не достигнет угла на своем текущем курсе. В противном случае два его решения определяются
Нас интересует время начала столкновения, которое является более ранним временем
t1
.Ваш метод станет:
источник
At the moment of collision, the ball will be touching the corner
но я не вижу оправдания этому приближению (и это должно быть приближение, потому что это неправда - мяч касается в двух местах, ни один из которых не является углом).Вот визуальный взгляд на проблему.
Исходный набор проблем - круг против прямоугольника (серый на рисунке ниже). Это эквивалентно точке против прямоугольника с закругленными углами (показано черным цветом).
Так что это проблема из нескольких частей. Вы проверяете свое столкновение точек против 4 линий (вытянутых из края рамки радиусом исходного круга) и 4 кругов (по углам прямоугольника с таким же радиусом исходного круга).
С грубой скоростью в вашем исходном изображении, точка попадет в нижний правый угловой круг. Все, что вам нужно сделать, это определить точку на угловом круге, которую вы бы ударили, рассчитать угол этого и отразить его.
Я оставлю вывод этого в качестве упражнения для читателя.
источник
Я работаю над игрой и тоже застрял здесь. Но я думаю, что это происходит так:
Есть еще одна точка зрения. Моя проблема в том, что я не знаю, как быстро вычислить новый dx, dy (для меня использование традиционной математики требует слишком большого количества вычислений).
источник
Кинематика - все о выборе правильной, как в наиболее удобной для расчетов, системы отсчета.
Здесь мы сначала определим преобразование T, которое разрешает наши оси в компоненты, параллельные ( x ' ) и перпендикулярные ( y' ) к линии между центром шара и углом. Обратное преобразование T * восстановит нашу исходную систему координат.
В этой новой системе отсчета, отражением (и временной и пространственной симметрией физики), мы имеем преобразование скорости контакта M ( точечный импульс ) как то, которое обращает компоненту x ' и оставляет неизменной компоненту y' . В матричных терминах это диагональная матрица с -1 и 1 на диагонали.
Тогда скорость после столкновения просто: V ' = T * . M . T . Во .
Время удара т затем только раствор для ( T . Do ) + ( Х . Т . Во- ) ( т ) = г , где Х является оператором проекции оси Х и г представляет собой радиус шара. Переставленные, получим
т = ( г - ( т . Do )) / (( Х . Т . Во- ) ( т ))
В этом есть явное преимущество, заключающееся в том, что вся сложная математика находится в тщательно написанных, протестированных и отлаженных стандартных графических библиотеках. Это решение также идентично для 2D и 3D ситуаций - просто переключите графическую библиотеку. Наконец, это подчеркивает, что нужно сначала подумать о соответствующих системах отсчета, прежде чем решать какие-либо физические проблемы. Всегда есть искушение NIH, но на самом деле это просто рецепт ошибок, когда доступно более сжатое решение.
источник