Тема: Использование библиотеки подпрограмм.
Цели работы: 1.Научиться подключать модули
2. Научиться работать с библиотекой подпрограмм.
Оборудование: IBM PC
Программное обеспечение: WINDOWS, PascalABC
Контрольные вопросы:
1. Как называется, и как подключается библиотека графических процедур и функций?
2.Как инициализируется графический режим?
3. Какие графические примитивы содержит модуль GraphABC?
4. Какими процедурами задают цвет и толщину пера?
5. Какими процедурами задают цвет кисти?
6. Какие процедуры используют при выводе и форматировании текста в
графическом окне?
Краткая теория.
Библиотека стандартных графических процедур и функций хранится в модуле GraphABC. При работе с графикой эту библиотеку необходимо подключать в разделе описаний с помощью зарезервированного слова Uses (подключить).
Изображение на экране монитора формируется из точек (пикселей) определенного цвета. Положение каждой точки задается ее координатами. В качестве экранных координат используют порядковые номера пикселов по горизонтали и вертикали. Они могут принимать только целочисленныезначения.
Началом отсчета является левый верхний угол экрана. Значения координаты x (абсциссы) отсчитывается слева направо, а значения у (ординаты) — сверху вниз.
В среде PascalABC рисование осуществляется в графическом окне.
Начало системы координат находится в левом верхнем углу окна, ось абсцисс направлена вправо, а ось ординат – вниз (рис.1)
рис.1
Размеры графического окна можно задавать с помощью процедуры
SetWindowSize(w,h), гдеw и h – ширина и высота окна. Значения координат принимают только целочисленные значения: x от 0 до w, а y от 0 до h.
Основные инструменты рисования — перо и кисть. Параметрами пера (Pen) задаются свойства линий и контуров фигур (толщина в пикселях, цвет…), а параметрами кисти (Brush) — их закраска.
При работе с графическим окном в среде PascalABC удобно все данные вводить и выводить в этом окне.Совмещать работу с текстом и графикой в одном окне можно, подключив модули CRT и GraphABC одновременно.
Изображение можно построить из простых геометрических фигур (гр. примитивов): точек, отрезков, прямоугольников, окружностей и т.д. Рисование различных геометрических фигур осуществляется с помощью специальных стандартных команд (процедур).
SetWindowSize(X,Y);
|
Устанавливает размеры графического окна (в пикселах)
|
SetPixel(x,y,c)
|
Рисование точки с координатами (х,у) цветом с
|
ClearWindow(c)
|
Очистка (заливка) окна цветом
|
Line(x1,y1,x2,y2);
|
Рисует отрезок от точки (x1,y1) до точки (x2,y2)
|
FloodFill(x,y,c)
|
Закрасить замкнутую область, содержащую точку (х, у) цветом с
|
SetPenColor(c)
|
Установить цвет пера
|
SetPenWidth(n)
|
Установить толщину пера в пикселах
|
SetPenStyle(s)
|
Установка стиля пера
|
SetBrushColor(c)
|
Установка цвета кисти
|
Rectangle(x1,y1,x2,y2)
|
Рисование закрашенного прямоугольника
|
Circle(x,y,r)
|
Рисование закрашенной окружности
|
SetFontStyle(fs)
|
Установка стиля шрифта
|
SetFontSize(n)
|
Установка размера шрифта в пикселах
|
TextOut(x,y,'текст')
|
Вывод текста в прямоугольник с координатами лев.верх.угла (x, y)
|
Команды для рисования
Цвета:
с
|
Цвет
|
с
|
Цвет
|
с
|
Цвет
|
clBlack
|
Черный
|
clSilver
|
Серебристый
|
clTeal
|
Сине-зеленый
|
clMaroon
|
Темно-красный
|
clRed
|
Красный
|
clGray
|
Серый
|
clGreen
|
Зеленый
|
clLime
|
Салатный
|
clWhite
|
Белый
|
clOlive
|
Оливковый
|
clBlue
|
Синий
|
clYellow
|
Желтый
|
clNavy
|
Темно-синий
|
clFuchsia
|
Сиреневый
|
clPurple
|
Фиолетовый
|
clGreen
|
Зеленый
|
clAqua
|
Бирюзовый
|
clBrown
|
Коричневый
|
clSkyBlue
|
Голубой
|
clLtGray
|
Светло-серый
|
clCream
|
Кремовый
|
Процедуры и функции рисования
procedure Ellipse(x1,y1,x2,y2: integer); - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).
procedure Rectangle(x1,y1,x2,y2: integer); - рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).
procedure RoundRect(x1,y1,x2,y2,w,h: integer); - рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.
procedure Arc(x,y,r,a1,a2: integer); - рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
procedure Pie(x,y,r,a1,a2: integer); - рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc).
procedure Chord(x,y,r,a1,a2: integer); - рисует фигуру, ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc).
procedure TextOut(x,y: integer; s: string); - выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s).
procedure FloodFill(x,y,color: integer); - заливает область одного цвета цветом color, начиная с точки (x,y).
procedure FillRect(x1,y1,x2,y2: integer); - заливает прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2), цветом текущей кисти.
procedure Polygon(var a; n: integer); строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.
procedure Polyline(var a; n: integer); -строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.
Действия с пером
function PenX: integer;
function PenY: integer; - возвращают текущие координаты пера.
procedure SetPenColor(color: integer); - устанавливает цвет пера, задаваемый параметром color.
function PenColor: integer; - возвращает текущий цвет пера.
procedure SetPenWidth(w: integer); - устанавливает ширину пера, равную w пикселам.
function PenWidth: integer; - возвращает текущую ширину пера.
procedure SetPenStyle(ps: integer); - устанавливает стиль пера, задаваемый параметром ps.
function PenStyle: integer; - возвращает текущий стиль пера.
Стили пера задаются следующими именованными константами:
Значение
|
Описание
|
psSolid
|
Сплошная линия (установлено по умолчанию)
|
psDash
|
Штриховая линия
|
psDot
|
Пунктирная линия
|
psDashDot
|
Штрихпунктирная линия
|
psDashDotDot
|
Линия, чередующая штрих и два пунктира
|
psClear
|
Отсутствие линии
|
Стили кисти задаются следующими именованными константами:
Значение
|
Шаблон
|
|
Значение
|
Шаблон
|
bsSolid
|
|
|
bsCross
|
|
bsClear
|
|
|
bsDiagCross
|
|
bsHorizontal
|
|
|
bsBDiagonal
|
|
bsVertical
|
|
|
bsFDiagonal
|
|
П
Пример 2. Составить программу, которая демонстрирует разложение белого света в призме.
program prizma;
uses graphABC; { подключение модуля graphABC }
begin
setWindowSize(400,340); { размеры окна }
ClearWindow(clGray); { серый фон }
line(200,40, 300,300); { треугольник }
line(200,40, 100,300); line(100,300, 300,300);
FloodFill(200,200,clSilver); { заливка }
setPenWidth(8); { толщина пера 8}
setPenColor(clWhite); line(20,150, 164,150); { падающий луч }
setPenWidth(5); { толщина пера 5}
{ Преломленные лучи: красный, желтый, синий }
setPenColor(clRed); line(164,147, 240,160); lineTo(360,190);
setPenColor(clYellow); line(164,150, 245,170); lineTo(360,220);
setPenColor(clBlue); line(164,153, 250,185); lineTo(360,260);
end.
ример 1. Составить программу, которая рисует
на экране графические примитивы: отрезок,
прямоугольник, круг, эллипс.
program grafika;
uses graphABC; { подключение модуля graphABC }
begin
setWindowSize(600,240); // размеры окна
line(80,40,500,40); // отрезок
setPenWidth(5); // толщина пера
setPenColor(clBrown); setBrushColor(clYellow);
// цвет пера и кисти
rectangle(40,80,200,160); // прямоугольник
setPenColor(clRed); setBrushColor(clAqua);
circle(300,120,40); // круг
setPenColor(clBlue); setBrushColor(clRed);
ellipse(400,80,540,160); // эллипс
setFontSize(15); setFontStyle(fsBold);
// размер и начертание шрифта
setFontColor(clBrown); setBrushColor(clWhite);
textOut(120,180,'Графические примитивы');
// вывод текста
end.
Пример 3. Картина.
Program Ricynki;
uses graphABC;
begin
|