TURBO PASCAL |
Новости |
Практическое задание 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. |
(с) Все права защищены. По всем интересующим вопросам прошу писать электронный адрес |