Guest User

Telescience

a guest
Mar 1st, 2014
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.49 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,Math, Vcl.ExtCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Label1: TLabel;
  12.     Label2: TLabel;
  13.     Label3: TLabel;
  14.     PowEdit: TEdit;
  15.     BeaEdit: TEdit;
  16.     EleEdit: TEdit;
  17.     CalibrBtn: TButton;
  18.     Panel1: TPanel;
  19.     Label4: TLabel;
  20.     Label5: TLabel;
  21.     StartXEdit: TEdit;
  22.     StartYEdit: TEdit;
  23.     Label6: TLabel;
  24.     Label7: TLabel;
  25.     RealXEdit: TEdit;
  26.     RealYEdit: TEdit;
  27.     Label8: TLabel;
  28.     RealBearingEdit: TEdit;
  29.     RealDistEdit: TEdit;
  30.     PowerOffsetEdit: TEdit;
  31.     Label9: TLabel;
  32.     Label10: TLabel;
  33.     Label11: TLabel;
  34.     TargetBtn: TButton;
  35.     Label12: TLabel;
  36.     Label13: TLabel;
  37.     XEdit: TEdit;
  38.     YEdit: TEdit;
  39.     UnTargetBtn: TButton;
  40.     procedure CalibrBtnClick(Sender: TObject);
  41.     procedure TargetBtnClick(Sender: TObject);
  42.     procedure UnTargetBtnClick(Sender: TObject);
  43.     procedure PowEditKeyPress(Sender: TObject; var Key: Char);
  44.   private
  45.     { Private declarations }
  46.   public
  47.     { Public declarations }
  48.     procedure Calibrate;
  49.     procedure obr;
  50.     procedure Target;
  51.     procedure UnTarget;
  52.   end;
  53.  
  54. var
  55.   Form1: TForm1;
  56.   X,Y,PowOff,DistC,Temp,BeaOff,StartX,StartY,RealX,RealY,Dist,Pow,Bea,Ele:real;
  57.  
  58. implementation
  59.  
  60. {$R *.dfm}
  61. procedure tform1.UnTarget;
  62. begin
  63. if xedit.Text<>'' then x:=strtofloat(xedit.Text) else x:=0;
  64. if yedit.Text<>'' then y:=strtofloat(yedit.Text) else y:=0;
  65. DistC:=round(sqrt(sqr(X-StartX)+sqr(Y-StartY)));
  66. pow:=sqrt(10*distc)+powoff;
  67. if pow>150 then showmessage('No Way') else
  68.   if (pow<=150) and (pow>120) then pow :=150 else
  69.     if (pow<=120) and (pow>100) then pow:=120 else
  70.       if (pow<=100) and (pow>80) then pow:=100 else
  71.         if (pow<=80) and (pow>50) then pow:=80 else
  72.           if (pow<=50) and (pow>40) then pow:=50 else
  73.             if (pow<=40) and (pow>30) then pow:=40 else
  74.               if (pow<=30) and(pow>25) then pow:=30 else
  75.                 if (pow<=25) and (pow>20) then pow:=25 else
  76.                   if (pow<=20) and (pow>10) then pow:=20 else
  77.                     if (pow<=10) and (pow>5) then pow:=10 else
  78.                       if (pow<=5) and (pow>=0) then pow:=5 else
  79.                         showmessage('No way');
  80. pow:=pow-powoff;
  81. ele:=arcsin(10*DistC/sqr(Pow))*180/(2*pi);
  82. if distC<>0 then bea:=(arcsin((x-startx)/Distc)*(180/pi))-beaoff else bea:=0;
  83. Beaedit.Text:=floattostr(bea);
  84. Eleedit.Text:=floattostr(ele);
  85. PowEdit.Text:=floattostr(pow+powoff);
  86. end;
  87.  
  88. procedure TForm1.UnTargetBtnClick(Sender: TObject);
  89. begin
  90. obr;
  91. untarget;
  92. end;
  93.  
  94. procedure tform1.Target;
  95. begin    
  96.   Dist:=(sqr(pow-PowOff)*sin(2*(ele*pi/180)))/10;
  97.   X:=startX+Dist*sin((bea+beaoff)*pi/180);
  98.   Y:=startY+Dist*cos((bea+beaoff)*pi/180);
  99.   xedit.Text:=floattostr(round(x));
  100.   yedit.Text:=floattostr(round(y));
  101. end;
  102.  
  103. procedure TForm1.TargetBtnClick(Sender: TObject);
  104. begin
  105. obr;
  106. target;
  107. end;
  108.  
  109. procedure tform1.obr;
  110. begin
  111. if Powedit.Text<>'' then Pow:=strtofloat(powedit.Text) else Pow:=0;
  112. if Beaedit.Text<>'' then Bea:=strtofloat(Beaedit.Text) else Bea:=0;
  113. if Eleedit.Text<>'' then Ele:=strtofloat(Eleedit.Text) else Ele:=0;
  114. if Startxedit.Text<>'' then StartX:=strtofloat(StartXedit.Text) else StartX:=0;
  115. if StartYedit.Text<>'' then StartY:=strtofloat(StartYedit.Text) else StartY:=0;
  116. if RealXedit.Text<>'' then RealX:=strtofloat(RealXedit.Text) else RealX:=0;
  117. if RealYedit.Text<>'' then RealY:=strtofloat(RealYedit.Text) else RealY:=0;    
  118. end;
  119.  
  120. procedure TForm1.PowEditKeyPress(Sender: TObject; var Key: Char);
  121. var
  122. ch:char;
  123. Edit:TEdit;
  124. begin
  125. edit:=sender as Tedit;
  126. ch:=formatsettings.DecimalSeparator;
  127. case key of
  128. '0'..'9',#8:;
  129. '.',',': if pos(ch,edit.Text)=0 then key:=ch else key:= char(0);
  130. else key:=char(0);
  131. end;
  132. end;
  133.  
  134. procedure TForm1.CalibrBtnClick(Sender: TObject);
  135. begin
  136. obr;
  137. calibrate;
  138. end;
  139.  
  140. procedure Tform1.Calibrate;
  141. begin
  142.   Dist:=(sqr(pow)*sin(2*(45*pi/180)))/10;
  143.   if (RealY-StartY)<>0 then
  144.   begin
  145.     Temp:=(abs(strtoint(floattostr(round(RealX-StartX)))))/(abs(strtoint(floattostr(round(RealY-StartY)))));
  146.     beaoff:=arcsin(Temp)*180/pi;
  147.     if RealX<StartX then Beaoff:=0-Beaoff;
  148.     RealBearingEdit.Text:=floattostr(beaoff);    
  149.   end
  150.   else  RealBearingEdit.text:='0';  
  151.   DistC:=round(sqrt(sqr(RealX-StartX)+sqr(RealY-StartY)));
  152.   RealDistEdit.text:=floattostr(DistC);
  153.   PowOff:=20-round(sqrt(10*Distc));
  154.   PowerOffsetEdit.text:=floattostr(PowOff);
  155. end;
  156. end.
Advertisement
Add Comment
Please, Sign In to add comment