Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по информатике.DOC
Скачиваний:
29
Добавлен:
02.05.2014
Размер:
1.68 Mб
Скачать

Var z: real;

begin

for i:=1 to 3 do

for j:=1 to 3 do begin z:=0;

for k:=1 to 3 do z:=z+a[i,k]*r[k,j];

b[i,j]:=z end;

for i:=1 to 3 do

for j:=1 to 3 do r[i,j]:=b[i,j] end;

PROCEDURE MOVE(dx,dy:real); {----расчет матриц А и R для переноса фигуры ---}

begin { ---на dx, dy--- }

for i:=1 to 3 do begin { 1 0 dx }

for j:=1 to 3 do a[i,j]:=0; { 0 1 dy }

a[i,i]:=1 end; { 0 0 1 }

a[1,3]:=dx; a[2,3]:=dy;

MULT; end;

PROCEDURE SCALE(sx,sy:real); {-расчет матриц А и R для масштабирования ----}

begin {--фигуры: по оси Х - умножение на sx, по оси Y - на sy --}

for i:=1 to 3 do

for j:=1 to 3 do a[i,j]:=0; { sx 0 0 }

a[1,1]:=sx; { 0 sy 0 }

a[2,2]:=sy; a[3, 3]:=1; { 0 0 1 }

MULT; end;

PROCEDURE ROTATE(alfa: real); {- расчет матриц А и R для поворота фигуры--}

var c, s: real; {---на угол alfa(рад)---}

begin { cos(alfa) -sin(alfa) 0 }

for i:=1 to 3 do { sin(alfa) cos(alfa) 0 }

for j:=1 to 3 do a[i,j]:=0; { 0 0 1 }

a[3,3]:=1;

c:=cos(alfa); a[1,1]:= c; a[2,2]:=c;

s:=sin(alfa); a[1,2]:=-s; a[2,1]:=s;

MULT; end;

123

PROCEDURE MIRROR(alfa: real); {---- расчет матриц А и R для зеркального ----}

var c, s: real; {----отражения объекта на угол alfa(рад)--}

begin { cos(2*alfa) sin(2*alfa) 0 }

for i:=1 to 3 do { sin(2*alfa) -cos(2*alfa) 0 }

for j:=1 to 3 do a[i,j]:=0; { 0 0 1 }

a[3,3]:=1;

c:=cos(2*alfa); a[1,1]:=c; a[2,2]:=-c;

s:=sin(2*alfa); a[1,2]:=s; a[2,1]:=s;

MULT; end;

PROCEDURE AXES(alfa,beta:real); {расчет матриц А и R сдвига осей координат }

{--- ось x смещается на угол alfa, ось y - на угол beta --}

begin

for i:=1 to 3 do begin { 1 tg(beta) 0 }

for j:=1 to 3 do a[i,j]:=0; { tg(alfa) 1 0 }

a[i,i]:=1 end; { 0 0 1 }

a[1,2]:=sin(beta)/cos(beta);

a[2,1]:=sin(alfa)/cos(alfa); MULT;

end;

PROCEDURE NEW_XY; {---- расчет новых координат фигуры по исходным ------ }

begin {----- с использованием матрицы преобразования R ------}

for i:=1 to n do begin

x[i]:=round( xa[i]*r[1, 1]+ ya[i]*r[1, 2]+ r[1, 3] );

y[i]:=round( xa[i]*r[2, 1]+ ya[i]*r[2, 2]+ r[2, 3] ) end;

end;

PROCEDURE PICTURE; {--- рисование фигуры по координатам X, Y --- }

begin moveto(x[n], y[n]);

for i:=1 to n do lineto(x[i], y[i]);

end;

PROCEDURE ROT_XY(xc,yc,beta:real);{- поворот фигуры вокруг точки ( хс, ус)--}

begin {-- на угол beta --}

MOVE(-xc, -yc); { Смещение центра поворота в центр начала координат }

ROTATE(beta); { поворот относительно начала координат }

MOVE(xc, yc); { обратное смещение фигуры }

end;

{------примеры аффинных преобразований исходной фигуры ------}