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