balistika
Ales Prochaska
prochaska
Středa Březen 17 14:37:11 CET 2004
> A jakpak to dopadlo ??? ;) Osobn? zat?m po??t?m jen s kolm?m letem
> vzh?ru, s t?m, ?e pohyb po x-ose je konstatn?, nebo se n?jak
> kvadraticky sni?uje (jako vlivem odporu vzduchu). zat?m jsem si psal
> takovou blbost jen v QB, ale ?asem to chci p?ev?zt n?kam v??e.
> T.p.V.
Psal jsem to pred 20 lety, takze se mi prosim nesmejte. Pocita se to
na ploche Zemi, s tihovym zrychlenim nezavislym na vysce. Jeste mam
nekde verzi pro kulatou Zemi, s Newtonovskou gravitaci, jestli o to
budete stat, zkusim ji najit nekde na paskach.
Ales Prochaska
==============================================================================
type
slozka = (x,y);
vektor = array [slozka] of extended;
var
krok : extended; { krok vypoctu [s] }
s,v : vektor; { poloha a smer pohybu hmotneho bodu }
rychlost : extended; { rychlost hmotneho bodu }
odpor : extended; { odpor prostredi }
{----------------------------------------------------------------------------}
function hustota (h : extended) : extended;
{ zavislost hustoty vzduchu na vysce }
{----------------------------------------------------------------------------}
const
{ hustota vzduchu v 10000 az 20000 m po 1000 m }
vzduch1 : array [0..10] of extended =
(0.4127, 0.3614, 0.3090, 0.2642, 0.2259, 0.1931,
0.1651, 0.1412, 0.1207, 0.1032, 0.0882);
{ hustota vzduchu v 20000 az 120000 m po 5000 m }
vzduch2 : array [0..20] of extended =
(8.820e-2, 4.030e-2, 1.840e-2, 7.810e-3, 3.594e-3, 1.728e-3, 9.237e-4,
5.670e-4, 3.481e-4, 2.289e-4, 1.443e-4, 8.637e-5, 4.635e-5, 2.831e-5,
1.026e-5, 6.581e-6, 2.901e-6, 1.986e-6, 1.071e-6, 7.593e-7, 4.476e-7);
{ hustota vzduchu ve 100 az 600 km po 100 km }
vzduch3 : array [0..5] of extended =
(2.9e-6,2.3e-10, 2.1e-11, 1.4e-12, 2.1e-13, 3.9e-14);
a = 0.0065; { teplotni gradient pro 0..10000 m }
g0 = 9.80665; { normalni tihove zrychleni }
p0 = 101325.0; { tlak pri hladine more }
r0 = 1.2255; { hustota vzduchu pri hladine more }
t0 = 288.0; { teplota pri hladine more }
begin {hustota}
if h<=10000 then begin
hustota:=r0*exp(ln(1-a/t0*h)*(1/a/p0*r0*g0*t0-1));
end
else if h<=20000.0 then begin
hustota:=vzduch1[round(h/1000)-10];
end
else if h<=120000.0 then begin
hustota:=vzduch2[round(h/5000)-4];
end
else if h<=600000.0 then begin
hustota:=vzduch3[round(h/100000)-1];
end
else hustota:=0;
end {hustota};
{----------------------------------------------------------------------------}
procedure vystrel ( v0 : extended; { pocatecni rychlost [m/s] }
namer : extended; { namer [deg] }
hmotnost : extended; { hmotnost granatu [kg] }
prumer : extended; { prumer granatu [m] }
cx : extended; { koeficient aerodyn. odporu }
var dostrel : extended; { dostrel [m] }
var dopad : extended); { dopadova rychlost [m/s] }
{ Simulacni vypocet dostrelu. }
{ Aerodynamicky odpor se pocita podle ucebnicoveho vzorecku pro podzvukovou }
{ rychlost. Granat se ale pohybuje nadzvukovou rychlosti a jeho Cx vlivem }
{ precese neni konstantni, takze by to chtelo nejake jine vzorecky a tabulky.}
{ Snizeni vlivem rotace granatu zanedbavam, vliv vetru, teploty a vlhkosti }
{ vzduchu tez. }
{----------------------------------------------------------------------------}
var
a : extended; { simulacni cas }
prurez : extended; { celni plocha }
begin {vystrel}
{ prepocitat namer ze stupnu na radiany }
namer:=namer*pi/180;
{ prurez }
prurez:=sqr(prumer)*pi/4;
{ pocatek }
s[x]:=0;
s[y]:=0;
{ pocatecni rychlost }
v[x]:=v0*cos(namer);
v[y]:=v0*sin(namer);
krok:=0.01; { krok simulace [s] }
a:=0; { simulacni cas [s] }
repeat
{ zmena polohy }
s[x]:=s[x]+v[x]*krok;
s[y]:=s[y]+v[y]*krok;
{ zmena rychlosti }
v[y]:=v[y]-g0*krok;
{ rychlost }
rychlost:=sqrt(sqr(v[x])+sqr(v[y]));
{ odpor prostredi }
odpor:=cx*prurez*hustota(s[y])/2*sqr(rychlost);
{ zmena rychlosti }
{ pricte se odpor prostredi (smer -v) }
v[x]:=v[x]+(-v[x]/rychlost*odpor/hmotnost)*krok;
v[y]:=v[y]+(-v[y]/rychlost*odpor/hmotnost)*krok;
a:=a+krok;
until s[y]<=0;
dostrel:=s[x];
dopad:=rychlost;
end {vystrel};
var
dostrel,dopad : extended;
begin
{ 30.5 cm delo Krupp, S.M.S. Kronprinz Rudolf, 1889 }
{ raze 305 mm }
{ hmotnost granatu 455 kg + prachove naplne 140 kg }
{ delka hlavne 9.77 m }
{ ustova rychlost 535 m/s }
{ pri nameru 15 stupnu dostrel 10 km, dopadova rychlost 332 m/s }
vystrel(535,15,455,0.305,0.52,dostrel,dopad);
writeln(dostrel:0:2,' ',dopad:0:2);
readln;
end.
Další informace o konferenci Hw-list