Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.DOC
Скачиваний:
23
Добавлен:
21.03.2015
Размер:
1.77 Mб
Скачать

Практическое задание n 1. 57

1. Создать уменьшающийся треугольник (деление сторон 9:1) и пульсирующий треугольник.

2. Создать уменьшающийся прямоугольник (деление сторон 3:1) и пульсирующий прямоугольник.

Примечание к п. 1 и п. 2: пульсация фигуры достигается перерисовкой ее в режиме XorPut, при многократном увеличении и последующем уменьшении коэффициента масштабирования, например, по закону: K= K + i*0. 02. Где i - параметр цикла.

3. Симметричное отображение фигуры.

Пусть хz - ось зеркальной симметрии, тогда координата "yzi" i-ой точки фигуры в системе координат (xz, yz) определяется по формуле:

yzi= (yi-yf)*cos(A)-(xi-xf)*sin(A),

где xf, yf - координаты любой точки на оси зеркальной симметрии,

xi, yi - координаты отображаемой точки в системе координат экрана,

A - угол наклона оси симметрии относительно оси "x" по часовой стрелке.

96

Тогда координаты отраженной точки в системе координат (X0Y) определяются по формулам:

xf xoi xi X

0 xoi = xi + 2*yzi*sin(A);

yf * yoi = yi - 2*yzi*cos(A);

yi

yoi

XZ

Y YZ

Приведем пример операторов для расчета координат xo[ i], yo[ i] точек фигуры зеркально отображенной относительно оси, наклоненной под углом "A" и проходящей через точку с координатами xf, yf.

for i:= 1 to N do begin

yzi:= round((y[i]-yf)*cos(A) - (x[i]-xf)*sin(A));

xo[i]:= x[i] + 2*round(yzi*sin(A));

yo[i]:= y[i] - 2*round(yzi*cos(A))

end;

Практическое задание n 1. 58

1. Нарисовать елку с основанием в центре экрана и получить три зеркальных отображения относительно осей, проходящих через центр экрана под углом +450, 00, -450 к оси "х".

2. Выполнить п. 1 для подсвечника со свечой.

4. Штриховка углов.

Определим координаты отрезков, образующих стороны угла и поделим их на N-частей. Соединим попарно точки раздела сторон угла так, чтобы наиболее удаленная от вершины угла точка на одной стороне соединялась с наименее удаленной точкой на другой стороне. Приведем процедуру штриховки угла.

Procedure UGOL(x1, y1, x2, y2, x3, y3, N: integer);

var xx1, xx2, yy1, yy2, i: integer; k: real;

begin

for i:= 1 to N+1 do begin k:= (i-1)/N;

xx1:=x1+round((x2-x1)*k); yy1:=y1+round((y2-y1)*k);

xx2:=x2+round((x3-x2)*k); yy2:=y2+round((y3-y2)*k));

line(xx1, yy1, xx2, yy2) { линия штриховки угла }

end

end;

Здесь x2, y2 - координаты вершины угла, x1, y1, x3, y3 - координаты крайних точек сторон. Коэффициент "k" определяет удаленность точки от вершины угла. Огибающая пересекающихся отрезков образует параболическую границу.

97

Практическое задание n 1. 59

1. Составить программу рисования звезды с N-вершинами, имеющими перекрестную штриховку углов. Звезда получается вращением угла вокруг центра, лежащего на биссектрисе на расстоянии, равном удвоенной длине стороны угла.

2. В предыдущей задаче центр узора располагать на биссектрисе с внешней стороны угла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]