Заполнения областей изображения
Будем понимать под заливкой заполнение некоторым узором (цветом или штриховкой различного вида) области изображения, ограниченной контуром (непрерывной замкнутой линией).
Пусть на экране монитора получено изображение некоторого замкнутого контура с использованием цвета С (С – цвет контура области) и задана некоторая точка экрана (X, Y). Если данная точка принадлежит области, ограниченной контуром, то эта область может быть заполнена текущем цветом с помощью процедуры
FloodFill (X,Y,C);
Если точка находится вне области, происходит заполнение внешней к контуру области.
Для выбора стиля (шаблона и цвета) заполнения области используется процедура
SetFillStyle (шаблон, цвет заполнения);
Значения шаблона задаются равными:
0 (сплошной цвет фона),
1 (сплошной текущий цвет),
2-6 (штриховка различной толщины наклона),
7-9 (заполнение клеткой различной толщины и наклона),
10-11 (заполнение точками, густо или редко расположенными).
При использовании процедуры SetFillStyle цвет заполнения может быть не равен цвету контура.
В языке Паскаль существуют специальные средства для заполнения эллипса, секторов круга и эллипса, параллелепипеда.
Объект | Изображение | Запись на языке Паскаль | ||
Эллипс, закрашенный текущим узором и цветом заполнения | FillEllipse (X, Y, RX, RY); где (X,Y) – координаты центра эллипса, RX, RY – длины горизонтальной и вертикальной полуосей | |||
Сектор круга, заполненный текущим узором | PieSlice (X, Y, ά1, ά2 , R); где (X,Y) – координаты центра, ά1, ά2 - начальный и конечный углы сектора, R – его радиус | |||
Сектор эллипса, закрашенный цветом по текущему шаблону | Sector (X, Y, ά1, ά2 , RX, RY); где (X,Y) – координаты центра эллипса, RX, RY – длины горизонтальной и вертикальной полуосей, ά1, ά2 - начальный и конечный углы сектора | |||
Параллелепипед, передняя грань которого может быть закрашена по текущему шаблону |
| Bar3D (X1, Y1, X2, Y2, D, Top); где (X1, Y1), (X2, Y2) – координаты диагональных точек передней грани (прямоугольника)б В – ширина боковой грани, Тор – признак отображения верхней грани (TRUE – отображать, FALSE – не отображать) |
2. Контрольные вопросы.
Что представляет собой графическое изображение
Что называется разрешающей способностью (разрешением) графического экрана.
Что представляет собой графический адаптер
Что представляет собой графический драйвер.
Действия, которые необходимо выполнить для работы в графическом режиме
Задания и технология выполнения.
3.1. Составить программу получения на экране монитора изображения прямоугольного треугольника и точки желтого цвета на зеленом фоне.
Program Tr1;
Uses Graph;
Var a,b: Integer;
Begin
a:=Detect;
InitGraph (a,b,'');
SetBkColor (2);
SetColor (14);
Line (240, 70, 240, 270);
Line (240, 270, 400, 270);
Line (240, 70, 400, 270);
PutPixel (400, 70, 14);
Readln; CloseGraph;
End.
3.2. Составить программу получения на экране монитора изображения снежной бабы (белого цвета на синем фоне).
Program BABA;
Uses Graph;
Var a,b:Integer;
Begin
a:=Detect; InitGraph (a,b,'');
SetBkColor (1);
SetColor (15);
Circle (320, 60, 30);
Circle (320, 140, 50)
Circle (320, 260, 70);
Readln; CloseGraph;
End.
3.3. Составить программу получения на экране монитора изображения головы робота.
Program ROBOT;
Uses Graph;
Var a,b:Integer;
Begin
a:=Detect; InitGraph (a,b,'');
SetBkColor (1);
SetColor (15); {голова}
Rectangle (270,180,370,300); {уши}
Rectangle (240, 220, 270, 260);
Rectangle (370, 220, 400, 260);
Readln; CloseGraph;
End.
3.4.Составить программу получения изображения прямоугольной трапеции.
Первый вариант решения примера 3.4
Program TRAPECIA_1;
Uses Graph;
Var a,b:Integer;
Begin
a:=Detect; InitGraph (a,b,’’);
MoveTo (240, 60);
LineTo (240, 200); {вниз}
LineTo (450, 200); {вправо}
LineTo (350, 60); {влево вверх}
LineTo (240, 60); {влево}
Readln; CloseGraph;
End.
Второй вариант решения примера 3.4 ( с использованием процедуры LineRel):
Program TRAPECIA_2;
Uses Graph; Var a,b:Integer;
Begin
a:=Detect; InitGraph (a,b,’’);
MoveTo (240, 60); LineRel (0, 140);
LineRel (210, 0); LineRel (-100, -140); LineRel (-110, 0);
Readln; CloseGraph;
End.
3.5. Составить программу получения изображения эллипса с центром в точке (320, 240) и длинами полуосей 190 и 80
Program ELIPS;
Uses Graph;
Var a,b:Integer:
Begin
a:=Detect;
InitGraph (a,b,’’);
Ellipse (320, 240, 0, 360, 190, 80);
Readln;
CloseGraph;
End.
3.6. Написать программу заполнения прямоугольного треугольника белым цветом ( с контуром желтого цвета на зеленом фоне).
Program Triangle_1;
Uses Graph;
Var a,b:Integer;
Begin
a:=Detect; InitGraph (a,b,’’);
SetBkColor (2); SetColor (14);
Line (240, 70, 240, 270);
Line (240, 270, 400, 270);
Line (240, 70, 400, 270);
FloodFill (320, 200, 14);
Readln; CloseGraph;
End.
3.7. Написать программу заполнения прямоугольного треугольника красным цветом (с контуром желтого цвета на зеленом фоне).
Скорректируем программу Triangle_1:
…
{корректировка программы Triangle_1}
Line (240, 70, 400, 270,);
SetFillStyle (1, 4);
{сплошной красный цвет заливки}
FloodFill (320, 260, 14);
…
3.8. Написать программу заполнения прямоугольной трапеции штриховкой светло-серого цвета нормальной толщины.
Program TRAPECIA_3;
Uses Graph;
Var a,b:Integer;
Begin
a:= Detect;
InitGraph (a,b,’’);
SetColor (1); {синий контур}
MoveTo (240, 60);
LineTo (240, 200);
LineTo (450, 200);
LineTo (350, 60);
LineTo (240, 60);
SetFillStyle (3, 7);
FloodFill (350, 175, 1);
Readln;
CloseGraph;
End.
3.9 Напишите программу заполнения окружности желтым цветом, которая после нажатия на клавишу Enter изменяет цвет заливки на зеленый.
Program CIRC;
Uses Graph;
Var a,b:Integer;
Begin
a:=Detect;
InitGraph (a,b,’’);
SetColor (14); {желтый контур}
Circle (320, 175, 100);
SetFillStyle (1, 14);
FloodFill (320, 175,14);
Readln;
ClearDevice;
SetColor (14);
Circle (320, 175, 50);
SetFillStyle (1, 2);
FloodFill (320, 175, 14);
Readln; CloseGraph;
End.
3.10. Написать программу получения изображения горизонтального отрезка с началом в точке (0,240).
Будем рассматривать отрезок как совокупность точек и использовать для получения его изображения процедуру PutPixel. Поместим ее в тело цикла с параметром For. Таким образом, получим изображение 640 точек с координатами (β, 240) при β=0,1,2,3,…,639; в результате соединения пиксели сольются в горизонтальный отрезок.
Program PUT_LANE;
Uses Graph;
Var a,b,k: Integer;
Begin
a:= Detect; InitGraph (a, b, ' ' );
{горизонтальная прямая}
For k:=0 To 639 do
PutPixel (k, 240,14);
{14 – желтый цвет}
Readin; CloseGraph;
End.
4. Контрольные задания.
4.1. Составить программу получения изображения «левой» полуокружности с центром в точке (250, 200) и радиусом 100.
4.2. Написать программу получения изображения семи параллельных отрезков равной длины. Концы отрезков: (100, у), (500,у), где у=50, 90, …, 290, значение у измеряется с шагом 40.(Использовать оператор While)
4.3. Написать программу получения изображения семи параллельных отрезков равной длины. Концы отрезков: (100, у), (500,у), где у=50, 90, …, 290, значение у измеряется с шагом 40.(Использовать оператор For)
4.4. Написать программу закраски прямоугольника различными цветами׃ смена цвета должна осуществляться после нажатия клавиши Enter.
Примечание: Пример основан на выполнении многократных действий׃ получение изображения прямоугольника, заполненного некоторым цветом.
Пусть i - номер цвета заполнения; i = 0, 1, 2, …, 15. Таким образом, уместно использование цикла For. В цикле следует задать стиль заполнения области (1 – сплошной текущий цвет) и изобразить закрашенный прямоугольник, например, с диагональными точками (220, 200), (450, 300).
4.5. Написать программу, которая по желанию пользователя выведет на экран изображение треугольника или прямоугольника.
Примечание: Пусть Р – переменная, по значению которой пользователь будет принимать решение о выводе требуемого изображения: треугольника (при Р = 1) или прямоугольника (при Р ¹ 1).
Будем получать изображение треугольника с вершинами в точках (240, 70), (400, 370), (180, 300) и изображение прямоугольника с вершинами в диагональных точках (240, 70) и (480, 300).
5. Рекомендуемая литература.
5.1.Бородич Ю.С. и др.Паскаль для персональных компьютеров. – Мн.: Высш.шк.: БФ ГИТМП «НИКА», 1991.- с.39-43
Практическое занятие № 6
Тема: Основы алгоритмизации и программирования.
Тема занятия: Процедуры и функции пользователя.
Цель: Получение практических навыков использования процедур и функций пользователя.
Техническое обеспечение: ПЭВМ
Программное обеспечение: Паскаль.
Место проведения занятий: Лаборатория ПЭВМ
Продолжительность занятия: 2 часа.
1. Краткая справка
Процедура - это независимая поименованная часть программы, которую можно вызвать по имени для выполнения определенных действий.
Структура процедуры повторяет структуру программы.
Функция – это поименованная часть программы, которую можно вызвать по имени, при этом в точку вызова передается скалярное значение и функция может входить в выражение как операнд.
Все процедуры и функции подразделяются на две группы:
· Встроенные.
· Определенные пользователем.
Первые входят в состав языка и вызываются для выполнения по строго фиксированному имени (например, SIN(X), SQR(X) – функции; CHRSQR – процедура).
Вторые разрабатываются и именуются самим пользователем.
Процедура пользователя – представляет собой именованную группу операторов, реализующих определенную часть общей задачи и вызываемую при необходимости для выполнения по имени из любой позиции раздела операторов.
Описание процедуры включает:
· Заголовок (имя).
· Тело процедуры.
Заголовок состоит из зарезервированного слова PROCEDURE, идентификатора (имени) процедуры и необязательного заключенного в круглые скобки списка формальных параметров с указанием типа каждого параметра.
Имя процедуры – идентификатор, уникальный в пределах программы.
Тело процедуры представляет собой локальный блок, по структуре аналогичный программе.