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

1. С использованием оператора цикла нарисовать на экране 12 одинаковых заполненных различными стандартными орнаментами фигур (в 3 ряда по 4 фигуры). По нажатию клавиши должен меняться вариант фигуры:

1. 1 Прямоугольник, 2. 1 Эллипс,

1. 2 Параллелепипед. 2. 2 Круг.

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

2. Нарисовать 5 вложенных прямоугольников с увеличением размера на 20 пикселов в каждом направлении. Стиль заполнения для каждой фигуры определить буквами Вашего имени.

3. Нарисовать 5 соосных кругов разного цвета с уменьшением радиуса на 10 пикселов. Стиль заполнения для каждого круга определить его номером, т. е. цифрами 1, 2, 3, 4, 5.

4. Определить три орнамента заполнения: "снежинка", "иголки" с наклоном влево и вправо. Нарисовать из треугольников пять елок и заполнить их орнаментом "иголки". Заполнить экран орнаментом "снежинка".

5. Создать элемент орнамента с единицами (4*4) в центре. Нарисовать на экране картину "ночной город", используя фрагменты "звездного неба" и пять прямоугольников, заполненных орнаментом 4*4 разного цвета.

6. Используя исходные орнаменты из одной линии составить с использованием логических операций орнаменты цифр: 1, 6, 7 и букв: B, F, E.

Работа с линиями

В графическом режиме курсор невидим, его положение можно определить функциями, возвращающими значения координат:

       
   


GetX; - по оси "Х", GetY; - по оси "Y".

Следующие процедуры перемещают курсор без рисования:

 
 


MoveTo(x, y); - переместить курсор в точку с координатами (x, y),

MoveRel(dx,dy); - сместить курсор на расстояние dx, dy от текущего положения.

Для построения многоугольников и ломаных линий удобно использовать процедуры:

 
 


LineTo(x, y); - провести отрезок прямой линии от текущего положения

курсора до точки с координатами X, Y.

LineRel(dX, dY); - провести отрезок прямой линии от текущего положения

курсора до точки, смещенной на расстояние dX, dY по

соответствующим осям.

В отличие от процедуры Line(x1, y1, x2, y2); процедуры LineTo(x, y); и LineRel(dX, dY); при своем исполнении перемещают текущий указатель.


Пример операторов для построения восьмиугольника:

 
 


R:=100; { расстояние от вершин до центра xc, yc }

xc:= GetMaxX div 2; yc:= GetMaxY div 2;

for i:= 1 to 8 do begin alfa:= i * pi/4; { значение угла в рад. }

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

y[i]:= yc + round(R * sin(alfa))

end;

MoveTo(x[8], y[8]); { исходная позиция для рисования }

for i:= 1 to 8 do LineTo(x[i], y[i]); { рисование линий }

Для отрезков прямых линий и процедур с их использованием можно задать режимы построения прямых линий оператором:

 
 


SetWriteMode(N);

N=0 - замещение линией изображения на экране (режим CopyPut) используется по умолчанию,

N=1 - изображение комбинируется (режим XorPut). Работа функции состоит в изменении согласно логической операции "исключающее ИЛИ" исходного значения цвета пиксела (числа "1" или "0"). Логическая функция Xor, примененная к одной переменной дважды, восстанавливает ее исходное значение: (J xor I) xor I = J. Следовательно при повторном проведении линии в режиме XorPut изображение этой линии уничтожается, а цвет пикселов экрана становится исходным. На этом правиле основаны некоторые программы построения движущихся изображений.

Пример операторов для рисования движущегося прямоугольника:

SetWriteMode(1);

a:= 100; b:= 50; { стороны прямоугольника }

x1:= 0; y1:= GetMaxY div 2;

N:= GetMaxX - x1 - a; { N - число перемещений }

for i:= 0 to N do begin

Rectangle(x1+i, y1, x1+a+i, y1+b); { рисование прямоугольника }

delay(10); Rectangle(x1+i,y1,x1+a+i,y1+b); { стирание прямоугольника }

end;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: