Программа рисования многоугольника. Описание алгоритмов процедур и функций. Описание интерфейсной части программы, страница 5

m_n[j,i]:=0;

end;

end;

{сортировка верхних вершин}

for j:= 1 to 7 do

begin

for i:= 1 to 5 do

begin

if (m_v[i+1, 2]<m_v[i, 2])  then

begin

y:= m_v[i+1, 1];

x:= m_v[i+1, 2];

m_v[i+1, 1]:=m_v[i, 1];

m_v[i+1, 2]:=m_v[i, 2];

m_v[i, 1]:= y;

m_v[i, 2]:= x;

end;

end;

end;

{сортировка нижних вершин}

for j:= 1 to 7 do

begin

for i:= 1 to 5 do

begin

if m_n[i+1, 2]>m_n[i, 2] then

begin

y:= m_n[i+1, 1];

x:= m_n[i+1, 2];

m_n[i+1, 1]:=m_n[i, 1];

m_n[i+1, 2]:=m_n[i, 2];

m_n[i, 1]:= y;

m_n[i, 2]:= x;

end;

end;

end;

bl_versh:=abs(sr_x-x6)+abs(sr_y-y6);//находим ближайшую к центру вершину

for i:=1 to 6 do

begin

if ((bl_versh) >= (abs(sr_x-m_y[i,2])+abs(sr_y-m_y[i,1]))) then

begin

x:=m_y[i,2];

y:=m_y[i,1];

bl_versh:=abs(sr_x-m_y[i,2])+abs(sr_y-m_y[i,1]);

end;

end;

{все вершины шестиугольника в один массив}

for j:=1 to 2 do

begin

for i:=1 to 6 do

begin

if (m_v[i,j]<>0)and (m_v[i+6,j+6]<>0) then m_y[i,j]:=m_v[i,j]

else m_y[i,j]:=m_n[i,j]

end;

end;

for i:=1 to 6 do

begin

if ((m_y[i,1]=y) and (m_y[i,2]=x)) then

osnver:=i;

end;

If OsnVer=1 then

begin

TDraw_PLT.Put_Texture(m_y[1,2],m_y[1,1],m_y[2,2],m_y[2,1],m_y[3,2],m_y[3,1]);

TDraw_PLT.Put_Texture(m_y[1,2],m_y[1,1],m_y[3,2],m_y[3,1],m_y[4,2],m_y[4,1]);

TDraw_PLT.Put_Texture(m_y[1,2],m_y[1,1],m_y[4,2],m_y[4,1],m_y[5,2],m_y[5,1]);

TDraw_PLT.Put_Texture(m_y[1,2],m_y[1,1],m_y[6,2],m_y[6,1],m_y[5,2],m_y[5,1]);

end;

If OsnVer=2 then

begin

TDraw_PLT.Put_Texture(m_y[2,2],m_y[2,1],m_y[3,2],m_y[3,1],m_y[4,2],m_y[4,1]);

TDraw_PLT.Put_Texture(m_y[2,2],m_y[2,1],m_y[4,2],m_y[4,1],m_y[5,2],m_y[5,1]);

TDraw_PLT.Put_Texture(m_y[2,2],m_y[2,1],m_y[5,2],m_y[5,1],m_y[6,2],m_y[6,1]);

TDraw_PLT.Put_Texture(m_y[2,2],m_y[2,1],m_y[1,2],m_y[1,1],m_y[6,2],m_y[6,1]);

end;

If OsnVer=3 then

begin

TDraw_PLT.Put_Texture(m_y[3,2],m_y[3,1],m_y[4,2],m_y[4,1],m_y[5,2],m_y[5,1]);

TDraw_PLT.Put_Texture(m_y[3,2],m_y[3,1],m_y[5,2],m_y[5,1],m_y[6,2],m_y[6,1]);

TDraw_PLT.Put_Texture(m_y[3,2],m_y[3,1],m_y[6,2],m_y[6,1],m_y[1,2],m_y[1,1]);

TDraw_PLT.Put_Texture(m_y[3,2],m_y[3,1],m_y[2,2],m_y[2,1],m_y[1,2],m_y[1,1]);

end;

If OsnVer=4 then

begin

TDraw_PLT.Put_Texture(m_y[4,2],m_y[4,1],m_y[5,2],m_y[5,1],m_y[6,2],m_y[6,1]);

TDraw_PLT.Put_Texture(m_y[4,2],m_y[4,1],m_y[6,2],m_y[6,1],m_y[1,2],m_y[1,1]);

TDraw_PLT.Put_Texture(m_y[4,2],m_y[4,1],m_y[1,2],m_y[1,1],m_y[2,2],m_y[2,1]);

TDraw_PLT.Put_Texture(m_y[4,2],m_y[4,1],m_y[3,2],m_y[3,1],m_y[2,2],m_y[2,1]);

end;

If OsnVer=5 then

begin

TDraw_PLT.Put_Texture(m_y[5,2],m_y[5,1],m_y[6,2],m_y[6,1],m_y[1,2],m_y[1,1]);

TDraw_PLT.Put_Texture(m_y[5,2],m_y[5,1],m_y[1,2],m_y[1,1],m_y[2,2],m_y[2,1]);

TDraw_PLT.Put_Texture(m_y[5,2],m_y[5,1],m_y[2,2],m_y[2,1],m_y[3,2],m_y[3,1]);

TDraw_PLT.Put_Texture(m_y[5,2],m_y[5,1],m_y[4,2],m_y[4,1],m_y[3,2],m_y[3,1]);

end;

If OsnVer=6 then

begin

TDraw_PLT.Put_Texture(m_y[6,2],m_y[6,1],m_y[1,2],m_y[1,1],m_y[2,2],m_y[2,1]);

TDraw_PLT.Put_Texture(m_y[6,2],m_y[6,1],m_y[2,2],m_y[2,1],m_y[3,2],m_y[3,1]);

TDraw_PLT.Put_Texture(m_y[6,2],m_y[6,1],m_y[3,2],m_y[3,1],m_y[4,2],m_y[4,1]);

TDraw_PLT.Put_Texture(m_y[6,2],m_y[6,1],m_y[5,2],m_y[5,1],m_y[4,2],m_y[4,1]);

end;

end;

procedure TDraw_PLT.Draw_luchi(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6: integer);

var

m_y: array [1..6, 1..2] of integer;

Cort: array [1..6] of integer;

i,k, min,max, j, y, x: integer;

bl_versh, sr_y,sr_x:real;

begin

OsnVer:=0;

{Деление шестиугольника пополам по у}

cort[1]:=y1;

cort[2]:=y2;

cort[3]:=y3;

cort[4]:=y4;

cort[5]:=y5;

cort[6]:=y6;

min:=y1;

max:=y1;

for k:=1 to 6 do

begin

if cort[k]<min then min:=cort[k];

if cort[k]>max then max:=cort[k];

end;

sr_y:=(min+max)/ 2;

{Деление шестиугольника пополам по х}

cort[1]:=x1;

cort[2]:=x2;

cort[3]:=x3;

cort[4]:=x4;

cort[5]:=x5;

cort[6]:=x6;

min:=x1;

max:=x1;

for k:=1 to 6 do

begin

if cort[k]<min then min:=cort[k];

if cort[k]>max then max:=cort[k];

end;

sr_x:=(min+max)/ 2;

{сортировка вершин шестиугольника}

m_y[1, 1]:=y1;

m_y[2, 1]:=y2;

m_y[3, 1]:=y3;

m_y[4, 1]:=y4;

m_y[5, 1]:=y5;

m_y[6, 1]:=y6;

m_y[1, 2]:=x1;

m_y[2, 2]:=x2;

m_y[3, 2]:=x3;

m_y[4, 2]:=x4;

m_y[5, 2]:=x5;

m_y[6, 2]:=x6;

bl_versh:=abs(sr_x-x6)+abs(sr_y-y6);//находим ближайшую к центру вершину