Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Никишев Курсовая.docx
Скачиваний:
7
Добавлен:
07.02.2015
Размер:
622.56 Кб
Скачать

Оптимальное моделирование:

x1, y1 x2, y2

x0, y0

x3, y3

R2 (MIN) = ((x1-x0)2 +( y1-y0)2 (x2-x0)2 +( y2-y0)2 (x3-x0)2 +( y3-y0)2) - min

unit Unit1;

interface

usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

var

Form1: TForm1;

dx,dy:real; //масштаб реки K_Der,D_Reki,N_R,D_Reki1,N_R1,R,i,num,mmx,rast,j,mmn,x,y,xv,yv,xn,yn:integer;

St:array[1..800,1..2] of integer; //длина реки

Pl:array[1..100,1..2] of integer; //количество деревень

Rw:array[1..2,1..2] of integer; //река

implementation

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);

begin

form1.Hide;

form2.show;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

xv:=strtoint(inputbox('vvod ','1-ая координата левого верхнего угла поля(0-10)',''));

yv:=strtoint(inputbox('vvod ','2-ая координата левого верхнего угла поля(0-10)',''));

xn:=strtoint(inputbox('vvod ','1-ая координата правого нижнего угла поля(580-650)',''));

yn:=strtoint(inputbox('vvod ','2-ая координата правого нижнего угла поля(500-580)',''));

K_Der:=strtoint(inputbox('vvod ','количество деревень(1-70)',''));

D_Reki:=strtoint(inputbox('vvod ','длина реки(300-550)',''));

N_R:=strtoint(inputbox('vvod ','начало реки(10-200)',''));

{D_Reki1:=strtoint(inputbox('vvod ','длина реки(300-550)',''));

N_R1:=strtoint(inputbox('vvod ','начало реки(10-200)',''));}

R:=strtoint(inputbox('vvod ','длина разбиения(10-20)',''));

randomize;

for i:=1 to K_Der do begin //определение координат деревень

Pl[i,1]:=random(570)+10;

Pl[i,2]:=random(480)+10;

end;

Rw[1,1]:=N_R; //координаты реки

Rw[1,2]:=D_Reki;

Rw[2,1]:=random(480)+10;

Rw[2,2]:=random(480)+10;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

form1.Canvas.Brush.Color:=clolive; //вывод поля

form1.Canvas.Rectangle(xv,yv,xn,yn);

dx:=D_Reki/(D_Reki-1); //определение масштаба по реке

dy:=(Rw[2,2]-Rw[2,1])/(D_Reki-1);

form1.Canvas.Pen.Color:=clblue;

form1.Canvas.MoveTo(Rw[1,1],Rw[2,1]-3); //вывод реки на экран

form1.Canvas.LineTo(Rw[1,2],Rw[2,2]-3);

form1.Canvas.MoveTo(Rw[1,1],Rw[2,1]+3);

form1.Canvas.LineTo(Rw[1,2],Rw[2,2]+3);

for j:=1 to D_Reki do begin //определение расстояния до деревень

mmx:=0;

for i:=1 to K_Der do begin

rast:=round(sqrt(sqr(10+ dx*(j-1)-Pl[i,1])+sqr(Rw[2,1]+dy*(j-1)-Pl[i,2])));

if mmx<rast then begin

mmx:=rast; //максимальное из расстояний до деревень

St[j,1]:=rast;

end;end;

end;

for i:=1 to K_Der do begin

form1.Canvas.Brush.Color:=clyellow; //вывод деревень с их нумерацией

form1.Canvas.Pen.Color:=clred;

form1.Canvas.TextOut(Pl[i,1]-14,Pl[i,2]-14,inttostr(i));

end;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

{mmn:=1000;

for i:=1 to (D_Reki-N_R) do begin}

while i<=(D_Reki-N_R) do begin

mmn:=1000;i:=i+R; //определение искомого места на реке

if St[i,1]<mmn then begin

mmn:=St[i,1];

num:=i+R;

end;end;

for j:=1 to K_Der do begin //вывод расстояний от искомого места до деревень

rast:=round(sqrt(sqr(10+ dx*(num-1)-Pl[j,1])+sqr(Rw[2,1]+dy*(num-1)-Pl[j,2])));

form1.Canvas.Brush.Color:=clsilver;

form1.Canvas.Pen.Color:=clred;

form1.Canvas.TextOut(Pl[j,1]-3,Pl[j,2]-3,inttostr(rast));

end;

form1.Canvas.Pen.Color:=clfuchsia; //вывод искомого места

form1.Canvas.brush.Color:=clfuchsia;

form1.Canvas.Ellipse(round(dx*(num-R)+2),round(Rw[2,1]+dy*(num-R)-8),round(18+dx*(num-R)),round(Rw[2,1]+dy*(num-R)+8));

for i:=1 to K_Der do begin //линии от искомого места до деревень

form1.Canvas.Pen.Color:=clnavy;

form1.Canvas.brush.Color:=clnavy;

form1.Canvas.MoveTo(round(dx*(num-1)+7),round(Rw[2,1]+dy*(num-1)-5));

form1.Canvas.LineTo(Pl[i,1]-5,Pl[i,2]-5);end;

end;end.