Реализация движения снаряда

Я выиграл Интернет за источники и нашел большую полезную информацию, но они - математические сайты, пытающиеся сказать мне, как решить то, что удит рыбу, объект должен быть в достигнуть y местоположения. Однако я пытаюсь выполнить моделирование и не нашел серьезных уравнений, которые могут быть реализованы для кодирования для моделирования параболической кривой. Могут те, которые имеют некоторое знание физики помочь мне на этом?

8
задан Dominic K 20 March 2010 в 00:24
поделиться

4 ответа

Хотя ответ Бенни хорош, особенно своей общностью, вы можете решить вашу проблему точно, а не использовать шаги конечного интегрирования. Уравнение, которое вам нужно:

s = u*t + 0.5*a*t^2;

Смотрите здесь объяснение того, откуда оно взялось.

Здесь s - перемещение, u - начальная скорость, a - ускорение и t - время. Это уравнение является одномерным, но может быть легко использовано для решения вашей задачи. Все, что вам нужно сделать, это разделить движение снаряда на две составляющие: одну параллельную ускорению и одну перпендикулярную. Если мы позволим Sx описать смещение в направлении x, а Sy - смещение в направлении y, то получим:

Sx = Ux*t + 0.5*Ax*t; 
Sy = Uy*t + 0.5*Ay*t;

Теперь в вашем конкретном примере Ax равно 0, так как единственное ускорение обусловлено гравитацией, которая действует в направлении y, то есть Ay = -g. Минус возникает из-за того, что гравитация будет действовать в направлении, противоположном первоначальному движению объекта. Ux и Uy получаются из простой тригонометрии:

Ux = U*cos(angle);
Uy = U*sin(angle);

Сложив все это вместе, вы получите два уравнения, описывающие, где будет находиться снаряд в момент времени t после запуска, относительно своего начального положения:

Sx = U*cos(angle)*t;
Sy = U*sin(angle)*t - 0.5*g*t^2;
7
ответ дан 5 December 2019 в 10:02
поделиться

Не используйте уравнения для позиции. Вместо этого используйте уравнения для скорости. Вычисляйте новую скорость в каждом цикле моделирования из старой скорости объекта и применяйте ее к вашему объекту. Вам нужно будет знать прошедшее время между каждым циклом моделирования. Конечно, это работает для вертикальной или горизонтальной скорости.

v_new = v_old + acceleration * delta_time  (from wikipedia)

Затем примените:

position_new = position_old + v_new * delta_time;

Вы можете использовать простое ускорение -9,8 м/с (не забывайте, что "вниз" на экране - это на самом деле увеличение вертикального положения! Поэтому для простоты вы можете использовать +9.8). Или вы можете проявить фантазию и добавить переменное ускорение (например, от ветра, если вы также моделируете горизонтальное движение объекта).

В основном, ускорение, которое вы применяете, основано на сумме сил, приложенных к объекту (сила тяжести, трение, реактивная тяга и т.д.).

F_final = F1 + F2 + ... + Fn

В этом вам может помочь следующее.

Если вы моделируете силу, приложенную к объекту, сначала разбейте силу на горизонтальную и вертикальную составляющие, используя:

F_horiz = F * sin( angle )
F_vert =  F * cos( angle )  where angle is the angle between the force and the horizontal.

Затем вычислите ускорение от силы, используя:

a = F / mass

(Я отдаю все заслуги за эти знания моему первому опыту программирования: GORILLA.BAS =) )

6
ответ дан 5 December 2019 в 10:02
поделиться

Некоторые определения:

x = x-coordinate (horizontal)
y = y-coordinate (vertical)
Vx = x-velocity
Vy = y-veloctiy
t = time
A = initial angle
V0 = intial velocity
g = acceleration due to gravity

Некоторые уравнения:

Vx = V0*cos(A)
Vy = V0*sin(A) - g*t
x = V0*cos(A)*t
y = V0*sin(A)*t - (1/2)*g*t^2
3
ответ дан 5 December 2019 в 10:02
поделиться

Вот хорошая библиотека, которая может вам помочь

http://sites.google.com/site/physics2d/

Я не особо разбирался в этом, если честно, я наткнулся на это в статье Скотта Уитлока о проекте кода.

http://www.codeproject.com/KB/WPF/SoapBoxCorePinBallDemo.aspx

1
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: