TURBO PASCAL

Новости       

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности 

Гостевая книга

Спонсор

От автора

 

Практическое задание N 1. 56

            1. Нарисовать узор из 30 - ти эллипсов с центром узора в середине экрана.  Радиусы каждого эллипса (Rx, Ry) и расстояние от "центра" эллипсов до центра узора увеличивать на один пиксел.

            2. Нарисовать узор из 20 -ти прямоугольников с центром узора в середине экрана.  Длины сторон прямоугольников и расстояние от центра узора до "центра" фигуры (например,  левого верхнего угла прямоугольника) уменьшать на один пиксел.  Для рисования прямоугольника использовать оператор: Rectangle(xf,  yf,  xf+a-i,  yf+b-i); где a и b - стороны прямоугольника,  i - параметр цикла вращения вокруг центра узора.

            3.  Нарисовать узор из отрезка прямой линии,  вращающегося вокруг своего "центра" (N - раз) за один оборот вокруг центра узора.

            4.  Нарисовать узор из отрезка прямой линии,  вращающегося вокруг своего "центра" (N - раз) за один полупериод движения по синусоиде.

yf = yс + Af * sin((xf-xc)/100),  где  Xf = xc + 10 * Pi * j;       j= 1,  2,  . . ,  10,   

Af - задать исходя из размеров экрана.

            5.  Составить процедуру рисования самолета (задавать координаты узлов,  которые соединяются прямыми линиями).  Нарисовать самолет,  движущийся вокруг центра узора по эллиптической траектории (Lx<>Ly).  Самолет должен поворачиваться вокруг своего "центра" в соответствии с траекторией ( cos(A)= Fx/L,  sin(A)= Fy/L,  где L=  /Fx2 + Fy2 ).

            6.  Составить процедуру рисования машины (задавать координаты узлов,  которые соединяются прямыми линиями).  Нарисовать машину,  движущуюся синусоиде.  Машина должна поворачиваться вокруг своего "центра" в соответствии с траекторией ( A= arctg(d(yf)/d(xf)),  для данного случая: A:=arctan(Af/100*cos((xf-xc)/100);

            Примечание к п.  5,  6:   Фигура перерисовывается в режиме SetWriteMode(1);

 

            2.  Масштабирование фигуры.

            Рассмотрим случай уменьшения размеров фигуры делением ее сторон. 

N:= 7;  R:= 170;  xc:= GetMaxX div 2;  yc:= GetMaxY div 2;

  for i:= 1 to N do begin alfa:= i*2. *pi/N;

             x[i]:= xc + round(R*cos(alfa));        { координаты вершин }

             y[i]:= yc + round(R*sin(alfa))      { исходного N-угольника }

  end;     

                     MoveTo(x[N], y[N]);

  for i:= 1 to N do  LineTo(x[i], y[i]);                { рисуем  N-угольник }

                        ch:= ReadKey;                             { нажать клавишу }  

Repeat                                                               { найдем середины сторон многоугольника

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

                            x1:= x[1];  y1:= y[1];

 for i:=1 to N-1 do begin  x[i]:= (x[i]+x[i+1]) div 2;

                           y[i]:= (y[i]+y[i+1]) div 2 end;

                            x[N]:= (x[N]+x1) div 2;

                            y[N]:= (y[N]+y1) div 2;

                                                                             { строим многоугольник по новым точкам }

                   MoveTo(x[N], y[N]);

  for i:=1 to N do LineTo(x[i], y[i]);

                          ch:=ReadKey;                     { нажать клавишу }  

Until ch=#27;

 

При нажатии клавиши внутрь фигуры будет "убегать" ее уменьшенная копия до нажатия клавиши Esc.  Стороны можно делить не пополам,  а в каком-либо соотношении.  Для стирания фигуры необходимо перерисовать ее в режиме XorPut.

            Масштабирование фигур можно проводить используя зависимости,  приведенные выше для вращения фигуры относительно своего "центра",  изменяя Kx и Ky,  при постоянных параметрах xf,  yf,  A.

 

На первую страницу

Rambler's Top100 PROext: Top 1000
Rambler's Top100

(с) Все права защищены.

По всем интересующим вопросам прошу писать электронный адрес

Hosted by uCoz