![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите плз алгоритм полёта пули на OpenGl!!! [Delphi, Windows]
min © (2004-05-04 18:15:00)В теме всё сказано.
matsic (2004-05-11 19:05:00) [1]Посмотри на этот фрагмент
#ifndef TFly3D_cpp
#define TFly3D_cpp
#include "vector3D.cpp"
const TVector3D g={0,-9.8,0};
const double K=0.0002;
const double QUALITY=0.0001;
struct TFly3D
{
TVector3D koord, v;
double mass;
void move(double);
};
void TFly3D::move(double dt)
{
double dt_opt,dt_sum,a_var_min,v_abs;
TVector3D a, a_const, a_var;
dt_sum=0;
a_const=(TVector3D)g;
m:
v_abs=abs(v);
a_var=-v*v_abs*K;
a_var_min=QUALITY/dt*v_abs;
if(a_var_min<abs(a_var)) dt_opt=QUALITY/K/v_abs/mass;
else dt_opt=dt-dt_sum;
a=a_const+a_var;
koord+=v*dt_opt+a*dt_opt*dt_opt/2.0;
v+=a*dt_opt;
dt_sum+=dt_opt;
if(dt_sum<dt) goto m;
}
#endif
Полный исходник, конечно, намного побольше. Все таки, имеем дело с 3D-векторами.
Здесь хоть и не учитывается сам ветер, но есть сила сопротивления воздуха. Силу ветра можно добавить к в расчет, если в строке
a_var=-v*v_abs*K;
Вектор скоростиvзаменить на скорость относительно воздухаv1=v-v_air,
гдеv_air- скорость ветра.
Не забудь пересчитать иv_absсоответственно.
Коэффициент сопротивления воздухаK.
QUALITYотвечает за точность расчета. Чем меньше - тем точнее, но больше жрет ресурсов. Можно брать от 0,01 до 0,1.
MrAngel (2004-05-06 01:22:00) [2]Goorus - именно :-)))
MeF88 (2004-05-05 11:34:00) [3]Помню здесь задача была - на каком расстоянии от стрелка упадет пули, при таких-то условиях... Вот здесь аналогично - просто надо найти кучу учебников и мануалов по физике, хотя бы банальный школьный учебник.
Goorus (2004-05-05 03:25:00) [4]Угу, а ещё надо учитывать тействие гравитационных сил всех планет во вселенной, Боровское движение, зависимость плотности воздуха от высоты, солнечную радиацию и уровень алкоголя в крови стрелка :)
MrAngel (2004-05-05 01:23:00) [5]Дело в том что в идеале пуля вовсе не летит по прямой. Вспомните снайперов. Те делают поправку на ветер, плотность воздуха, дальность, высота позиции стрелка.
Рамиль (2004-05-04 22:16:00) [6]А что, на OpenGL пуля как то по другому летит?!.:) Как же ее тогда на DirectDraw кособочит...
ворошиловский стрелок (2004-05-04 21:49:00) [7]по прямой.. лучше по параболе.