Помощь - Поиск - Пользователи - Календарь
Полная версия: физика в игре
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
mamont001
мне нехватает формулы полета в зависимости от начальной скорости и угла также должно учитоваться сопротвления воздуха и ветра,желательно в tp7 или delphi
Bokul
Какой формы снаряд? Вот тут интересно описано физика, но без формул.
mamont001
в worms играл?тут что-то типа снаряда базуки из worms world party
Bokul
Вот, что у меня выйшло для материальной точки:

{$N+}
{$E+}
Uses Graph,crt;

function rad(q:real):real;
begin
rad:=q/360*2*pi;
end;

const
{ OPTIONS }
shag=0.01;
lgr = 0;
pgr = 3;
zcrtX=320;
zcrty=240;
mtrX=1;
mtrY=1;
colorG=15;
colorOXY=4;
OXYminX=-200;
OXYmaxX=200;
OXYminY=-320;
oxymaxY=320;

h=20; {начальная высота снаряда}
x0=-40; {начальное положения снаряда по осе Х}
v0=200; {начальная скорость снаряда}
L=40; {начальный угол к горизонту снаряда}
k=0.5; {коэффициент сопротивления воздуха}
g=9.8; {сила тяжести}
a=50; {сила ветра}

Var grDriver : Integer;
grMode : Integer;

x,y,t:real;{extended;}
i:integer;
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrty,colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-i,colorOXY);

t:=lgr;
while y>=0 do
begin
if k<>-1 then
begin
y:=h+
(v0*sin(rad(l))*t)/
(k+1)-
(g*t*t*t)/
2*(k+1);
x:=x0+
(v0*cos(rad(l))*t)/
(k+1)-
(a*t*t*t)/
2*(k+1);
putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg)
delay(1);
end;
t:=t+shag;
end;
writeln(t:0:2);
readkey;
closegraph;
end.


Описание констант смотри сдесь
mamont001
спасибо
Bokul
mamont001, не спеши, я сомневаюсь, что моя в моей проге правильо расчитывается положения снаряда в зависимости от времени. Надо еще подумать. Хотя костяк у тебя есть. И даже графики выходят правдоподобными, но формулы все-таки не правильны.
volvo
mamont001, загляни и вот сюда тоже:

Имитация полета снаряда, работа с графикой
, может оказаться полезным...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.