Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,Math, Vcl.ExtCtrls;
- type
- TForm1 = class(TForm)
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- PowEdit: TEdit;
- BeaEdit: TEdit;
- EleEdit: TEdit;
- CalibrBtn: TButton;
- Panel1: TPanel;
- Label4: TLabel;
- Label5: TLabel;
- StartXEdit: TEdit;
- StartYEdit: TEdit;
- Label6: TLabel;
- Label7: TLabel;
- RealXEdit: TEdit;
- RealYEdit: TEdit;
- Label8: TLabel;
- RealBearingEdit: TEdit;
- RealDistEdit: TEdit;
- PowerOffsetEdit: TEdit;
- Label9: TLabel;
- Label10: TLabel;
- Label11: TLabel;
- TargetBtn: TButton;
- Label12: TLabel;
- Label13: TLabel;
- XEdit: TEdit;
- YEdit: TEdit;
- UnTargetBtn: TButton;
- procedure CalibrBtnClick(Sender: TObject);
- procedure TargetBtnClick(Sender: TObject);
- procedure UnTargetBtnClick(Sender: TObject);
- procedure PowEditKeyPress(Sender: TObject; var Key: Char);
- private
- { Private declarations }
- public
- { Public declarations }
- procedure Calibrate;
- procedure obr;
- procedure Target;
- procedure UnTarget;
- end;
- var
- Form1: TForm1;
- X,Y,PowOff,DistC,Temp,BeaOff,StartX,StartY,RealX,RealY,Dist,Pow,Bea,Ele:real;
- implementation
- {$R *.dfm}
- procedure tform1.UnTarget;
- begin
- if xedit.Text<>'' then x:=strtofloat(xedit.Text) else x:=0;
- if yedit.Text<>'' then y:=strtofloat(yedit.Text) else y:=0;
- DistC:=round(sqrt(sqr(X-StartX)+sqr(Y-StartY)));
- pow:=sqrt(10*distc)+powoff;
- if pow>150 then showmessage('No Way') else
- if (pow<=150) and (pow>120) then pow :=150 else
- if (pow<=120) and (pow>100) then pow:=120 else
- if (pow<=100) and (pow>80) then pow:=100 else
- if (pow<=80) and (pow>50) then pow:=80 else
- if (pow<=50) and (pow>40) then pow:=50 else
- if (pow<=40) and (pow>30) then pow:=40 else
- if (pow<=30) and(pow>25) then pow:=30 else
- if (pow<=25) and (pow>20) then pow:=25 else
- if (pow<=20) and (pow>10) then pow:=20 else
- if (pow<=10) and (pow>5) then pow:=10 else
- if (pow<=5) and (pow>=0) then pow:=5 else
- showmessage('No way');
- pow:=pow-powoff;
- ele:=arcsin(10*DistC/sqr(Pow))*180/(2*pi);
- if distC<>0 then bea:=(arcsin((x-startx)/Distc)*(180/pi))-beaoff else bea:=0;
- Beaedit.Text:=floattostr(bea);
- Eleedit.Text:=floattostr(ele);
- PowEdit.Text:=floattostr(pow+powoff);
- end;
- procedure TForm1.UnTargetBtnClick(Sender: TObject);
- begin
- obr;
- untarget;
- end;
- procedure tform1.Target;
- begin
- Dist:=(sqr(pow-PowOff)*sin(2*(ele*pi/180)))/10;
- X:=startX+Dist*sin((bea+beaoff)*pi/180);
- Y:=startY+Dist*cos((bea+beaoff)*pi/180);
- xedit.Text:=floattostr(round(x));
- yedit.Text:=floattostr(round(y));
- end;
- procedure TForm1.TargetBtnClick(Sender: TObject);
- begin
- obr;
- target;
- end;
- procedure tform1.obr;
- begin
- if Powedit.Text<>'' then Pow:=strtofloat(powedit.Text) else Pow:=0;
- if Beaedit.Text<>'' then Bea:=strtofloat(Beaedit.Text) else Bea:=0;
- if Eleedit.Text<>'' then Ele:=strtofloat(Eleedit.Text) else Ele:=0;
- if Startxedit.Text<>'' then StartX:=strtofloat(StartXedit.Text) else StartX:=0;
- if StartYedit.Text<>'' then StartY:=strtofloat(StartYedit.Text) else StartY:=0;
- if RealXedit.Text<>'' then RealX:=strtofloat(RealXedit.Text) else RealX:=0;
- if RealYedit.Text<>'' then RealY:=strtofloat(RealYedit.Text) else RealY:=0;
- end;
- procedure TForm1.PowEditKeyPress(Sender: TObject; var Key: Char);
- var
- ch:char;
- Edit:TEdit;
- begin
- edit:=sender as Tedit;
- ch:=formatsettings.DecimalSeparator;
- case key of
- '0'..'9',#8:;
- '.',',': if pos(ch,edit.Text)=0 then key:=ch else key:= char(0);
- else key:=char(0);
- end;
- end;
- procedure TForm1.CalibrBtnClick(Sender: TObject);
- begin
- obr;
- calibrate;
- end;
- procedure Tform1.Calibrate;
- begin
- Dist:=(sqr(pow)*sin(2*(45*pi/180)))/10;
- if (RealY-StartY)<>0 then
- begin
- Temp:=(abs(strtoint(floattostr(round(RealX-StartX)))))/(abs(strtoint(floattostr(round(RealY-StartY)))));
- beaoff:=arcsin(Temp)*180/pi;
- if RealX<StartX then Beaoff:=0-Beaoff;
- RealBearingEdit.Text:=floattostr(beaoff);
- end
- else RealBearingEdit.text:='0';
- DistC:=round(sqrt(sqr(RealX-StartX)+sqr(RealY-StartY)));
- RealDistEdit.text:=floattostr(DistC);
- PowOff:=20-round(sqrt(10*Distc));
- PowerOffsetEdit.text:=floattostr(PowOff);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment