Program


Het programma leest uit de bronfile de data die ie nodig heeft om een trajectorie te berekenen. Ze heten allemaal bro2x.txt de x geef je als eerste in na het starten van pbn22.exe. Er is een bro25.txt en een bro26.txt aanwezig, dus een 5 en een 6 laten de zooi zo werken. De files bro2x.txt en de Pascal source file zijn verderop gegeven.

Het programma leest dus een regel van de bronfile, en gaat daarmee door tot ie de laatste regel daarvan heeft gelezen. Per lijn schrijft ie dan een alinea in een logfile, met daarin de belangrijkste gegevens over de baan die het resultaat was van de laatst gelezen gegevens. Verder schrijft ie 3 losse files weg met daarin per regel paren tijd - positie x - positie y In een programma als matlab kunnen deze files dan gecombineerd worden tot een grafiek: x-t , y-t , x-y of x-y-t

Bug & snag :

't programma schrijft altijd in c:\mat weg geloof ik. Ik wist niet hoe dat anders moest toen ik 't programma schreef.

De toelichting van de werking van het programma in de .pas file is niet geheel up-to-date. De formules kloppen nog. staphalvering doet ie niet meer.

De huidige .exe loopt zonder gebruik van coprocessor or whatever, 'k weet niet zeker hoe dat exact gebeurd is en of 't elders wel werkt.


Pascal listing

PROGRAM pijlbaanbenadering;
uses crt;
CONST g=9.82;
      lud=1.293;   { luchtdichtheid }
      luv=17.1e-6; { luchtviscositeit }
      inittstap=1; { initiele stapgrootte h }
   {  aanthalv=13; }{ maximum aantal halveringen op het tijddomein }
   {  h=0.001; } {0.0001 geeft 2 significante decimalen op alle resultaten}

> { Benadering van het paar eerste orde gekoppelde differentiaalvergelijkingen
      ( Niet lineair & inhomogeen --> benaderen dus )
    Het model beschrijft het horizontale en verticale deel van de pijlvlucht
    gescheiden:                              V
               .                              y
             m V = Fw                Fw = Fw -
                x    x                 x     V          2    2    2
                               met               , en  V = V  + V
                                             V              x    y
               .                              x
             m V = -m g ñ Fw         Fw = Fw -        Fw is bekend als functie
                y         y            y     V        van V.

De aanvangswaarden van snelheid en positie alsmede de lanceerhoek
    completeren een beginwaarde-probleem, dat als volgt benaderd wordt:
                               .
                 Vx   = Vx + h Vx                  X   = X + h Vx
                   i+1    i      i                  i+1   i      i
    snelheid:                  .     en plaats:
                 Vy   = Vy + h Vy                  Y   = Y + h Vy
                   i+1    i      i                  i+1   i      i

Waarin h (dimensie tijd) de stapgrootte is. }

VAR
    V,Vx,Vy,X,Y,Fw,
    Vo,yo,Th,Yh,Xh,yT,xT,Xg,
    t,h,ppm,
    m,lp,rp,lf,hf,la:real;
    log,bron,xpt,ypt,tpt:text;
    i:integer;
    naam:string;
    vogelvrij,nietovertop:boolean;

FUNCTION Fwv(v,lp,rp,lf,hf:real):real; {de wrijvingsversnelling, positief!}
VAR fff:real;
  BEGIN
    fff:=0.35*pi*SQR(rp);
    fff:=fff+2*pi*(0.074*exp(-0.2*ln(lud/luv*v*lp))+0.008*lp/rp*exp(-0.4*ln(lud/luv*v*lp)))*rp*lp;
    fff:=fff+6*1.328/SQRT(lud/luv*v*lf)*lf*hf;
    Fwv:=fff*lud*SQR(v)/2;
  END;

BEGIN
  writeln('Geef het karakter dat subnaam is voor bro2- en log2files.');
  naam:=readkey;
  writeln('Geef de stapgrootte bij de benadering ( 1>h>0.0001(=cm exact) )');
  readln(h);
  writeln('Geef het gewenste aantal punten per meter op ( < 0.1 is niet zinnig )');
  readln(ppm);
  writeln;
  assign(bron,'bro2'+naam+'.txt');
  reset(bron);
  assign(log,'log2'+naam+'.txt');
  rewrite(log);
  assign(xpt,'xpt2'+naam+'.txt');
  rewrite(xpt);
  assign(ypt,'ypt2'+naam+'.txt');
  rewrite(ypt);
  assign(tpt,'tpt2'+naam+'.txt');
  rewrite(tpt);
  WHILE NOT eof(bron) DO
    BEGIN                            { ******  START LOOP  ****** }
      readln(bron,Vo,m,lp,rp,lf,hf,la,yo,yT,xT);
      writeln(log,'Vo= ',Vo:5:2,'  La= ',la:5:2);
      t:=0;
      V:=Vo;
      Vx:=Vo*cos(pi/180*la);
      Vy:=Vo*sin(pi/180*la);
      X:=0;
      Y:=yo;
        writeln(xpt,0);              { De eerste plotcoordinaten }
        writeln(ypt,yo);
        writeln(tpt,0);
        Xg:=1/ppm;      { 't Eerstvolgende punt wordt geschreven zodra X>Xg }
      vogelvrij:=true;
      nietovertop:=true;        
      WHILE vogelvrij DO
        BEGIN                        { ***  START LOOP *** }
          t:=t+h;                    { De eigenlijke berekeningen }
          Fw:=Fwv(V,lp,rp,lf,hf);    { Fw en V zijn strikt positief }
          Vx:=Vx-h*Fw*Vx/V/m;
          Vy:=Vy-h*(g+Fw*Vy/V/m);
          X:=X+h*Vx;
          Y:=Y+h*Vy;
          V:=SQRT(SQR(Vx)+SQR(Vy));  { Alles is nu berekend voor deze omloop }
          vogelvrij:=NOT((Y<YT)AND(X>XT));
          IF ((Vy<0)AND nietovertop) THEN
            BEGIN                    { Afvangen van de top }
              Th:=t;
              Yh:=Y;
              Xh:=X;
              nietovertop:=false;
            END;                       
          IF ((X>Xg) OR (not vogelvrij)) THEN
            BEGIN                    { Wegschrijven van plaats-tijd data }
              writeln(xpt,X);
              writeln(ypt,Y);
              writeln(tpt,t);
              Xg:=Xg+1/ppm;
            END;
        END;                         { ***  END LOOP  *** }
                                     { Nu de afwikkeling van 't log }
      writeln(log,h:6:5,' top(t,x,y)= ( ',Th:4:2,', ',Xh:6:2,', ',Yh:5:2,' )',
                    '  inslag(t,x,v)= ( ',T:4:2,' , ',X:6:2,', ' ,V:5:2,' )');
      writeln(log);
    END;                             { ******  END LOOP  ****** }
  close(bron);
  close(log);
  close(xpt);
  close(ypt);
  close(tpt);

END.


velocity          m/s      Watch those units !!!
arrow mass        kg       =====================
arrow length      m
arrow radius      m
fletchinglength   m
fletchingheight   m (their product ought to be fletchsurface-area)
launch angle (degrees)
initial height    m
impact height     m
Obsolete quantity, just state 1, I forgot why


bro25.txt

44.95 0.021 0.76 0.00397 0.065 0.006 20 0 0 1
44.14 0.019 0.76 0.00275 0.035 0.008 20 0 0 1
45.12 0.020 0.76 0.00377 0.065 0.006 20 0 0 1
44.63 0.019 0.71 0.00357 0.065 0.006 20 0 0 1


bro26.txt


52.5 0.020 0.76 0.00367 0.065 0.006 9.13 1.75 1.3 1
52.5 0.020 0.76 0.00367 0.065 0.006 9 1.75 1.3 1
52.5 0.020 0.76 0.00367 0.065 0.006 10 1.75 1.3 1


HomeBack*