Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Графы / Unit1

.pas
Скачиваний:
5
Добавлен:
01.05.2014
Размер:
5.89 Кб
Скачать
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
Edit5: TEdit;
Button2: TButton;
Edit6: TEdit;
Edit7: TEdit;
Label5: TLabel;
Label6: TLabel;
Edit8: TEdit;
Label7: TLabel;
Edit9: TEdit;
Label8: TLabel;
StringGrid1: TStringGrid;
Button3: TButton;
procedure PrintGraf(Sender: TObject);
procedure line1(Sender: TObject);
procedure grafout(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}





procedure linestr(x1,y1,x2,y2:integer);
var sx,sy,l,x3,y3:integer;
begin
form1.Canvas.MoveTo(x1,y1);
form1.Canvas.LineTo(x2,y2);

sx:=round((x2+x1)/2);
sy:=round((y2+y1)/2);

if (x2-x1<20)and(y1<y2) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx-5,sy-5);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx+5,sy-5);
end else
if (x2-x1<20)and(y2<y1) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx-5,sy+5);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx+5,sy+5);
end
else begin
l:=round(sqrt(sqr(sx-x1)+sqr(sy-y1)));
x3:=round(sx-20*(sx-x1)/l);
y3:=round(sy-40*(sy-y1)/l);

form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(x3,sy);
form1.Canvas.MoveTo(sx,sy);
x3:=round((sx+x3)/2);
y3:=round((sy+y3)/2);
form1.Canvas.LineTo(x3,y3);
end;
end;


procedure line2str(x1,y1,x2,y2:integer);
var sx,sy:integer;
begin
form1.Canvas.MoveTo(x1,y1);
form1.Canvas.LineTo(x2,y2);


sx:=round((x2+x1)/2);
sy:=round((y2+y1)/2);

if (abs(x2-x1)<20)and(y2>y1) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx-5,sy-5);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx+5,sy-5);
end else
if (abs(x2-x1)<20)and(y2<y1) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx+5,sy+5);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx-5,sy+5);
end else
if (abs(y2-y1)<20)and(x2>x1) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx-5,sy+5);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx-5,sy-5);
end else
if (abs(y2-y1)<20)and(x2<x1) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx+5,sy+5);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx+5,sy-5);
end else
if (x1<x2)and(y1<y2) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx-5,sy);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx,sy-5);
end else
if (x1>x2)and(y1<y2) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx+5,sy);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx,sy-5);
end else
if (x1<x2)and(y1>y2) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx-5,sy);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx,sy+5);
end else
if (x1>x2)and(y1>y2) then begin
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx+5,sy);
form1.Canvas.MoveTo(sx,sy);
form1.Canvas.LineTo(sx,sy+5);
end;
end;

procedure printgraph(x,y,r,n:integer);
var i,x2,y2,a1:integer;
a,b,c,s,x1,y1:real;
begin
a:=2*pi/n;
a1:=round(a);

b:=0;
for i:=1 to n do begin
b:=b+a;

x1:=x+r*cos(b);
y1:=y+r*sin(b);

x2:=round(x1);
y2:=round(y1);
form1.Canvas.Ellipse(x2,y2,x2+5,y2+5);
form1.Canvas.TextOut(x2+5,y2-7,inttostr(i));
end;
end;


procedure TForm1.PrintGraf(Sender: TObject);
var i,n,x,y,r,x2,y2,a1,h:integer;
a,b,c,s,x1,y1:real;
begin
n:=strtoint(edit1.Text);
x:=strtoint(edit2.Text);
y:=strtoint(edit3.Text);
r:=strtoint(edit4.Text);

printgraph(x,y,r,n);


stringgrid1.ColCount:=n+1;
stringgrid1.RowCount:=n+1;
h:=stringgrid1.Height;
stringgrid1.DefaultColWidth:=h div (n+1) -2;
stringgrid1.DefaultRowHeight:=h div (n+1) -2;

for i:=1 to n+1 do begin
stringgrid1.Cells[0,i]:=inttostr(i);
stringgrid1.Cells[i,0]:=inttostr(i);
stringgrid1.Cells[i,i]:='1';
end;

end;


procedure TForm1.line1(Sender: TObject);
var x1,y1,x2,y2,sy,sx,l,x3,y3:integer;
begin
x1:=strtoint(edit6.Text);
y1:=strtoint(edit7.Text);
x2:=strtoint(edit8.Text);
y2:=strtoint(edit9.Text);

line2str(x1,y1,x2,y2);
{linestr(x1,y1,x2,y2);}
end;

procedure TForm1.grafout(Sender: TObject);
var n,i,j,x1,x2,y1,y2,x,y,r:integer;
a,b1,b2:real;

procedure kolco(x1,y1:integer);
begin
if (x1=x)and(y1<y)then
form1.Canvas.Ellipse(x1-5,y1-10,x1+5,y1+2)
else
if (x1=x)and(y1>y)then
form1.Canvas.Ellipse(x1-5,y1+12,x1+5,y1)
else
if (x1<x)then
form1.Canvas.Ellipse(x1-10,y1-10,x1+2,y1+2)
else
if (x1>x) then
form1.Canvas.Ellipse(x1+12,y1+12,x1,y1);

end;
begin
n:=strtoint(edit1.Text);
x:=strtoint(edit2.Text);
y:=strtoint(edit3.Text);
r:=strtoint(edit4.Text);

a:=2*pi/n;
b1:=0;
b2:=0;
for i:=1 to n do begin
b1:=b1+a;
x1:=round(x+r*cos(b1));
y1:=round(y+r*sin(b1));
for j:=1 to n do begin
b2:=b2+a;
x2:=round(x+r*cos(b2));
y2:=round(y+r*sin(b2));
if (stringgrid1.Cells[i,j]='1')and(j<>i) then line2str(x2,y2,x1,y1);
if (x1=x2)and(y1=y2) then kolco(x1,y1);

end;
end;
end;

end.
Соседние файлы в папке Графы
  • #
    01.05.2014188 б6Project1.dpr
  • #
    01.05.2014876 б5Project1.res
  • #
    01.05.201410.39 Кб5Unit1.dcu
  • #
    01.05.201451 б5Unit1.ddp
  • #
    01.05.20144.55 Кб6Unit1.dfm
  • #
    01.05.20145.89 Кб5Unit1.pas
  • #
    01.05.201451 б5Unit1.~ddp
  • #
    01.05.20144.55 Кб5Unit1.~dfm
  • #
    01.05.20145.89 Кб6Unit1.~pas