Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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;

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;

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

Var alfa: real;

BEGIN n:=4; { число вершин фигуры }

m:=12; { число зеркальных отображений фигуры }

xc:=5; yc:=5; {"центр" фигуры}

xa[1]:=5; ya[1]:=5; { координаты вершин фигуры на чертеже }

xa[2]:=70; ya[2]:=20;

xa[3]:=15; ya[3]:=55; 0 X

xa[4]:=20; ya[4]:=20;

 

Gd:= Detect;

InitGraph(Gd, Gm, 'C:\tp7\bgi'); Y

xc1:=GetMaxX div 2; yc1:=GetMaxY div 2; { центр экрана }

I_R; NEW_XY; { исходные координаты фигуры }

SetWriteMode(1);

{-------------- Вращение вокруг смещающегося центра -----------}

for l:=1 to 150 do begin

PICTURE;

xc:=xc+3; yc:=yc+2; putpixel(xc, yc, 12); { смещение центра xc, yc }

MOVE(3,2); { перенос фигуры соответственно смещению центра }

ROT_XY(xc, yc, -0.3); { поворот на 0.3 рад относительно xc, yc }

Delay(2); PICTURE; NEW_XY;

End;

Readln; ClearDevice;

SetWriteMode(0);

{--------- Зеркальные отображения фигуры -------------}

I_R; PICTURE;

for i:=1 to n do begin

xa[i]:=x[i]; ya[i]:=y[i] end; {задание исходных координат фигуры}

for l:=1 to m do begin alfa:=2*Pi*(l-1)/m; {угол наклона зеркала к оси X}

{ Line(xc1-round(xc1*cos(alfa)), yc1-round(xc1*sin(alfa)),

xc1+round(xc1*cos(alfa)), yc1+round(xc1*sin(alfa))); {линия зеркала}

MOVE(-xc1,-yc1); MIRROR(alfa); MOVE(xc1,yc1); { преобразования}

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

End;

Readln;

CloseGraph;

END.

В первой части программы фигура вращается вокруг точки, перемещающейся по диагонали экрана. Во второй части программы фигура последовательно отображается вокруг осей, проходящих через центр экрана.

 




Дата добавления: 2015-09-10; просмотров: 142 | Поможем написать вашу работу | Нарушение авторских прав

ANGLE(x, y); readln; CloseGraph end. | Создание узоров построением зеркальных отображений фигуры. | Работа с текстом в графическом режиме | Практическое задание N 1. 62 | GetMem(P, Size); | Мультипликация с чередованием видеостраниц | Модификация контурного изображения | Практическое задание N 2. 1 | Уравнение прямой на плоскости | Построение касательных и нормалей к плоским кривым |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.556 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав