Войти
ПрограммированиеФорумФизика

полёт снаряда.... (ошибки в программировании формул)

#0
14:21, 11 окт 2011

Что-же я неправильно запрограммировал?

Код тут:
http://code.google.com/p/tanks-of-freedom/source/browse/trunk/tshoot.java

#1
14:46, 11 окт 2011

Sniper, ты забыл указать что именно неправильно (как ты то понял) и как хотелось бы.

И да, а какое это вообще имеет отношение к физике?

#2
15:11, 11 окт 2011

slava_mib
> ты забыл указать что именно неправильно
да неправильно там, в общем-то, всё, так что не страшно.

#3
15:39, 11 окт 2011

А какие формулы правильные?

#4
15:51, 11 окт 2011

> А какие формулы правильные?
Sniper, думаю, это сильно зависит от:
> как хотелось бы.
Ты не поставил задачу, но просишь подсказать тебе ответ на неё )))

#5
15:56, 11 окт 2011

Sniper
> А какие формулы правильные?
А правильные формулы я смогу нарисовать после правильной постановки задачи. Желательно увидеть что-то вроде: из точки (x0,y0,z0) происходит выстрел под углом fi относительно оси x и углом psy относительно плоскости xy. Снаряд массой m калибра d имеет лобовое сопротивление f(v,d,m). Способ решения: числовой или аналитический, причём какой из них предпочтительнее. Тогда можно будет получить координаты от времени, если я ничего из исходных данных не забыл упомянуть.

#6
16:15, 11 окт 2011

Алексей Патрашов:

Без массы и сопротивления воздуха и без калибра аналитический.

Вот что я нашёл на просторах интернета:

t = (2*v0*sin(fi))/g; // это общее время движения

x = x0 + v0*t*cos(fi); // по x
y = y0 + v0*t*sin(fi) - (g*t*t)/2; //по y

Формулы не правильные?

Что делать с z координатой, не ясно.

#7
16:19, 11 окт 2011

Sniper
формулы не списывать надо, а пытаться понять. если понимаешь, что значат эти буковки, не придётся спрашивать, правильные ли они.

#8
16:30, 11 окт 2011

жЫскаЧь )

#9
16:48, 11 окт 2011

Sniper
> Формулы не правильные?
Мне сдаётся, что эти формулы должны были выглядеть вот так (время полёта на горизонтальной поверхности посчитано правильно)
x = x0 + v0*t*cos(fi); // по x
y = y0 + v0*t*sin(fi) - (g*t*t)/2; //по y
Если y считается высотой, то вторая зависимость вообще не нужна потому, что координаты высот выстрела и приземления совпадают. Приведём задачу в человеческий вид. Для начала примем, что стрельба ведётся на плоскости, а всеми разностями высот можно пренебречь. Координату z направим вверх. С учётом предыдущих моих обозначений получим следующее.
t=(2*v0*sin(psy))/g; // Время полёта, так оно и было
x=x0+v0*t*cos(fi); // Координата приземления x
y=y0+v0*t*sin(fi); // Координата приземления y
z=z0 // Это наше условие
А вот сделать так же просто стрельбу с горы на гору не получится потому, что разность высот заранее неизвестна и в решение влезет функция Z высот поверхности. Такую задачу придётся решать числовым способом. Проще всего задать функцию высоты от времени и условие.
dt=0.01;
t=dt;
x=x0+v0*t*cos(fi);
y=y0+v0*t*sin(fi);
z=z0+v0*t*sin(psy)-g*t*t/2;
while Z(x,y)<z:
{t+=dt;
x=x0+v0*t*cos(fi);
y=y0+v0*t*sin(fi);
z=z0+v0*t*sin(psy)-g*t*t/2;}
В итоге получаем координаты приземления снаряда. Для практического использования этот алгоритм можно оптимизировать.

#10
10:53, 12 окт 2011

Sniper
Есть 2 способа решение задачи:
1. Геометрическим способом (расчет траектории идеального снаряда. Не учитывает параметры: масса снаряда, сила выстрела, сопротивление воздуха, притяжение и т.д).
2. Физическим способом (расчет траектории снаряда->к реальному. Учитывает параметры: масса снаряда, сила выстрела, сопротивление воздуха, притяжение и т.д).
Выберите метод расчета.

ПрограммированиеФорумФизика

Тема в архиве.