Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Выпускная квалификационная работа Определение места удара.docx
Скачиваний:
59
Добавлен:
19.06.2018
Размер:
981.72 Кб
Скачать

Приложение а

unit PositionUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, TeEngine, Series, TeeProcs, Chart;

type

TForm1 = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

Panel3: TPanel;

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

edtX: TEdit;

edtY: TEdit;

Label3: TLabel;

edtV: TEdit;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

edtdt12: TEdit;

edtdt23: TEdit;

edtdt31: TEdit;

PaintBox1: TPaintBox;

GroupBox2: TGroupBox;

Label7: TLabel;

Label8: TLabel;

edtXMin: TEdit;

edtYMin: TEdit;

Chart1: TChart;

Series1: TFastLineSeries;

Label9: TLabel;

edtV1: TEdit;

procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure PaintBox1Paint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

Arr: array [1..150, 1..150] of double;

SArr: array [1..150, 1..150] of integer;

end;

var

Form1: TForm1;

const

x1 = 0 ; x2 = 150; x3 = 150;

y1 = 150; y2 = 0; y3 = 150;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var t1,t2,t3: double;

C: double;

C1: double;

dt12, dt23, dt31: double;

i,j, k: integer;

Max: double;

Min: double;

gMin, gC: double;

xMin, yMin, gyMin, gxMin: integer;

Xa,Ya : integer;

begin

Xa := Trunc(X/4);

Ya := Trunc(Y/4);

edtX.Text := IntToStr(Xa);

edtY.Text := IntToStr(Ya);

C := StrToFloat(edtV.Text)*1000;

t1 := sqrt(sqr(Xa-x1) + sqr(Ya-y1))/C;

t2 := sqrt(sqr(Xa-x2) + sqr(Ya-y2))/C;

t3 := sqrt(sqr(Xa-x3) + sqr(Ya-y3))/C;

dt12 := Trunc((t1-t2)*1e8)*1e-8;

dt23 := Trunc((t2-t3)*1e8)*1e-8;

dt31 := Trunc((t3-t1)*1e8)*1e-8;

edtdt12.Text := FloatToStr(dt12);

edtdt23.Text := FloatToStr(dt23);

edtdt31.Text := FloatToStr(dt31);

Max := 0;

Min := 1e30;

gMin := Min;

//C1 := 6000000;

Series1.Clear;

//C1:= 5700-6100;

for k:=0 to 100 do

begin

C1 := 5700000 + k*4000;

Min := 1e30;

for i:=1 to 150 do

for j:=1 to 150 do

begin

t1 := sqrt(sqr(i-x1) + sqr(j-y1))/C1;

t2 := sqrt(sqr(i-x2) + sqr(j-y2))/C1;

t3 := sqrt(sqr(i-x3) + sqr(j-y3))/C1;

Arr[i][j] := sqr(dt12 - (t1-t2)) + sqr(dt23-(t2-t3));// + sqr(dt31 - (t3-t1));

if Arr[i][j] > Max then

Max := Arr[i][j];

if Arr[i][j] < Min then

begin

Min := Arr[i][j];

xMin := i;

yMin := j;

end;

if Min < gMin then

begin

gMin := Min;

gxMin := xMin;

gyMin := yMin;

gC := C1;

end;

end;

Series1.AddXY(C1/1000, Min*1e14);

end;

for i:=1 to 150 do

for j:=1 to 150 do

SArr[i][j] := Trunc((Arr[i][j]/Max)*255);

for i:=1 to 150 do

for j:=1 to 150 do

begin

PaintBox1.Canvas.Pixels[i*4-3,j*4-3] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-2,j*4-3] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-1,j*4-3] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-0,j*4-3] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-3,j*4-2] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-2,j*4-2] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-1,j*4-2] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-0,j*4-2] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-3,j*4-1] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-2,j*4-1] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-1,j*4-1] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-0,j*4-1] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-3,j*4-0] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-2,j*4-0] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-1,j*4-0] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

PaintBox1.Canvas.Pixels[i*4-0,j*4-0] := (SArr[i][j] shl 16) or (SArr[i][j] shl 8) or (SArr[i][j]);

end;

edtXMin.Text := IntToStr(gxMin);

edtYMin.Text := IntToStr(gyMin);

PaintBox1.Canvas.Pen.Color := clWhite;

PaintBox1.Canvas.Brush.Style := bsClear;

PaintBox1.Canvas.Ellipse(20*4,20*4,130*4,130*4);

PaintBox1.Canvas.Pen.Color := clGreen;

PaintBox1.Canvas.Brush.Color := clGreen;

PaintBox1.Canvas.Brush.Style := bsSolid;

PaintBox1.Canvas.Ellipse(X-4,Y-4,X+4,Y+4);

PaintBox1.Canvas.Pen.Color := clWhite;

PaintBox1.Canvas.Brush.Color := clRed;

PaintBox1.Canvas.Brush.Style := bsSolid;

PaintBox1.Canvas.Ellipse(gxMin*4,gyMin*4,gxMin*4+4,gyMin*4+4);

edtV1.Text := FloatToStr(gC/1000);

end;

procedure TForm1.PaintBox1Paint(Sender: TObject);

begin

PaintBox1.Canvas.Brush.Style := bsSolid;

PaintBox1.Canvas.Brush.Color := clBlack;

PaintBox1.Canvas.Pen.Color := clBlack;

PaintBox1.Canvas.FillRect(Rect(0,0,600,600));

PaintBox1.Canvas.Pen.Color := clWhite;

PaintBox1.Canvas.Brush.Style := bsClear;

PaintBox1.Canvas.Ellipse(20*4,20*4,130*4,130*4);

end;

end.