home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 18 / CD_ASCQ_18_111294_W.iso / dos / prg / pas / gfxfx / math.pas < prev    next >
Pascal/Delphi Source File  |  1994-06-22  |  3KB  |  118 lines

  1. {$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+}
  2. {$M 16384,0,655360}
  3.  
  4. program Math;
  5. { 'Solar Simulator', version 0.001beta, by Bas van Gaalen and Sven van Heel }
  6. { Somewhere around early 1993 or late 1992 }
  7. uses
  8.   crt,graph;
  9.  
  10. const
  11.   GridX   = 1.0E8;      { m/pixel }
  12.   GridY   = 1.0E8;      { m/pixel }
  13.   G       = 6.67E-11;   { NM^2kg^-2 }
  14.   Msun    = 1.989E30;   { kg }
  15.   {Mearth  = 4.976E24;} { kg }
  16.   {SunSize = 696E6;}    { m }
  17.   {EarthS  = 6.378E6;}  { m }
  18.   {Dist    = 1.49E9;}   { m }
  19.  
  20. {----------------------------------------------------------------------------}
  21.  
  22. procedure InitGraphics;
  23.  
  24. var
  25.   grDriver : integer;
  26.   grMode   : integer;
  27.   ErrCode  : integer;
  28.  
  29. begin
  30.   grdriver := detect;
  31.   initgraph(grdriver,grmode,'I:\BGI');
  32.   errcode := graphresult;
  33.   if errcode <> grok then writeln('Graphics error:',grapherrormsg(ErrCode));
  34. end;
  35.  
  36. {----------------------------------------------------------------------------}
  37.  
  38. procedure Action;
  39.  
  40. const
  41.   Time    = 60*1; { sec }
  42.  
  43. var
  44.   I,
  45.   PrevX,
  46.   PrevY,
  47.   SunX,
  48.   SunY     : word;
  49.   EarthX,
  50.   EarthY,
  51.   Dist,
  52.   Angle,
  53.   a,
  54.   V,
  55.   Vx,
  56.   Vy,
  57.   Rsubx,
  58.   Rsuby    : extended;
  59.   PrevStr,
  60.   VStr,
  61.   PrevDist,
  62.   DistStr  : string;
  63.  
  64. begin
  65.   SunX := 320; SunY := 240;
  66.   EarthX := GridX*200; EarthY := GridY*150;
  67.  
  68.   putpixel(SunX,SunY,white);
  69.   Vx := 45000; Vy := 0; { m/s }
  70.  
  71.   settextstyle(smallfont,horizdir,4);
  72.   PrevStr := ''; PrevDist := ''; I := 0;
  73.   setcolor(lightgray);
  74.   outtextxy(0,470,'V:       km/s    Dist:         m');
  75.  
  76.   repeat
  77.     putpixel(SunX+round(EarthX/GridX),SunY-round(EarthY/GridY),lightcyan);
  78.     PrevX := SunX+round(EarthX/GridX);
  79.     PrevY := SunY-round(EarthY/GridY);
  80.  
  81.     Dist := sqrt(sqr(EarthX)+sqr(EarthY));
  82.     Angle := arctan(EarthY/EarthX);
  83.     if (EarthX < 0) then Angle := Angle+pi;
  84.  
  85.     Vx := Vx+cos(Angle)*G*Msun*Time/sqr(Dist);
  86.     Vy := Vy+sin(Angle)*G*Msun*Time/sqr(Dist);
  87.  
  88.     EarthX := EarthX-Vx*Time;
  89.     EarthY := EarthY-Vy*Time;
  90.  
  91.     inc(I);
  92.     if I = 100 then begin
  93.       V := sqrt(sqr(Vx)+sqr(Vy));
  94.       str(V/1000:7:2,Vstr);
  95.       str(Dist/1e9:7:2,DistStr);
  96.       setcolor(black);
  97.       outtextxy(10,470,PrevStr);
  98.       outtextxy(125,470,PrevDist+'e9');
  99.       setcolor(lightgray);
  100.       outtextxy(10,470,Vstr);
  101.       outtextxy(125,470,DistStr+'e9');
  102.       PrevStr := VStr;
  103.       PrevDist := DistStr;
  104.       I := 0;
  105.     end;
  106.  
  107.     putpixel(round(PrevX),round(PrevY),darkgray);
  108.   until keypressed;
  109. end;
  110.  
  111. {----------------------------------------------------------------------------}
  112.  
  113. begin
  114.   InitGraphics;
  115.   Action;
  116.   closegraph;
  117. end.
  118.