Моделирование движения прыгающего мяча.

Я пишу программу, которая отображает строку текста и анимирует мяч, который прыгает от слога к слогу (как пение). Программа знает расположение каждого слога и знает, в какое время должен быть шарик на каждом слоге.

У меня есть набор уравнений, которые работают нормально, но не очень хорошо. Я придумал их несколько лет назад после долгих поисков и спотыканий. Они занимают место предыдущего слога ( Икс 0 , у 0 ), расположение следующего слога ( Икс 1 , у 1 ), время t (от старта 0 до финиша 1) и вычислить, где должен находиться мяч ( Икс , у ):

г "=" Икс 1 Икс 0
в "=" г / т
час "=" 5 + 0,3 | г |
Икс ( т ) "=" Икс 0 + в т у ( т ) "=" у 0 час + [ 4 час г 2 ( | г | 2 | в | т ) 2 ]

Чего бы я хотел, так это лучшего набора уравнений, которые более точно моделируют движение прыгающего мяча. Мяч с собственным разумом, я полагаю, поскольку ему нужно менять скорость и направление с каждым новым слогом.

Может быть, я ошибаюсь, но мне кажется, что вы хотели бы использовать уравнения движения снаряда , а не прыгающий мяч. Получение надлежащего в может быть немного сложнее, но, может быть, так физически правильнее?
Сохранение импульса может сделать недействительным направление переключения мяча...
Уравнения снаряда @KyleKanos выглядят многообещающе. Я думаю, мне нужно было бы определить v и тета с точки зрения d, но я не знаю, как это сделать.
Вам нужно будет указать угол , но это можно сделать: г "=" в 2 грех ( 2 θ ) / г (в ссылке используется г "=" р ).

Ответы (1)

Вам нужно положение мяча ( Икс ( т ) , у ( т ) ) для 0 < т < 1 я толстый т "=" 0 , мяч был брошен с начальной скоростью ( в Икс , в у ) на позиции ( Икс 0 , у 0 ) в гравитационном поле ускорений а "=" ( а Икс , а у ) "=" ( 0 , г ) . Скорость должна быть откалибрована, чтобы мяч достиг точки ( Икс 1 , у 1 ) в т "=" 1 .

Положение мяча определяется

Икс ( т ) "=" Икс 0 + в Икс т
у ( т ) "=" у 0 + в у т г т 2 2

Мы хотим получить ( в Икс , в у ) получить Икс ( т "=" 1 ) "=" Икс 1 и у ( т "=" 1 ) "=" у 1 , так,

Икс ( т "=" 1 ) "=" Икс 0 + в Икс "=" Икс 1
у ( т "=" 1 ) "=" у 0 + в у г 2 "=" у 1

и поэтому,

в Икс "=" Икс 1 Икс 0
в у "=" у 1 у 0 + г 2

и, наконец, ваши уравнения движения:

Икс ( т ) "=" Икс 0 + ( Икс 1 Икс 0 ) т
у ( т ) "=" у 0 + ( у 1 у 0 + г 2 ) т г т 2 2

Спасибо, это полностью помогло! Я действительно ценю то, что за этим стоит твердое уравнение, а не то, что я искалечил в работе раньше. Я заметил одну вещь: в этих уравнениях мяч всегда достигает одной и той же высшей точки. Я хочу, чтобы мяч поднимался выше на большие расстояния и опускался на более короткие, поэтому я меняю g в зависимости от расстояния. Я обнаружил, что g = 3 * |x1 - x0| хорошо работает для моего конкретного использования. Если есть лучший способ добиться этого, я хотел бы знать. Еще раз спасибо!
Что вы можете сделать, так это получить приведенные выше уравнения, взяв x(t')=x1 и y(t')=y1. Итак, теперь 0<t<t'. Затем вы можете выбрать t' произвольно. Чем больше t, тем выше поднимется мяч. Следовательно, вы можете выбрать t', пропорциональное |x1-x0|, то есть t' = K|x1-x0|, и калибровать K до тех пор, пока наивысшая точка, которой достигает мяч, не будет вас удовлетворять.