Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal_metod_lab_rab.docx
Скачиваний:
40
Добавлен:
17.02.2016
Размер:
832.19 Кб
Скачать

Вопросы к защите лабораторной работы

1. Чем отличается символьный тип данных от строковых?

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

Лабораторная работа №11 компьютерная графика

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

Краткие теоретические сведения.

Для построения изображения на экране дисплея используется специальная биб­лиотека подпрограмм, называемая Graph. В нее входят графи­ческие процедуры и функции для выдачи различных по форме фигур и линий, а также средства организации графического режима. Эти средства предназначены для анализа возможнос­тей используемого дисплея — разбиения поля экрана на раз­личное число мелких квадратиков, каждый из которых счита­ется отдельной точкой изображения и называется пикселем. Для дисплея типа VGA число точек может быть 640 * 480, а количество используемых цветов — 16. Однако более слож­ные, не рассматриваемые здесь средства Паскаля позволяют увеличить количество цветов до 256. Цвет, как и координаты экранной точки, задается целым числом. Начало координат экрана находится в левом верхнем углу (точка 0,0), ось Ох на­правлена вправо, Оу — вниз (рис.9).

Рис. 9. Система координат экрана дисплея

Эту особенность направленности оси Оу следует учитывать при построении изображений, особенно графиков функций и диаграмм. Для построенной

Рис. 10.

Установление соответствия между точками отрезка [а, b] и осью Ох экрана дисплея

на рисунке 9 окружности необ­ходимо отмечать координаты центра и радиус, для прямо­угольника — координаты противоположных вершин (напри­мер, А и D). Координаты точки А (180, 160) заданы на рисун­ке. Каждое изображение можно также построить по точкам, указав для каждой точки ее координаты и цвет.

При построении изображений используются так называе­мые графические примитивы — базовые конструкции и их модификации. К графическим примитивам относятся: точка, отрезок, дуга.

Точка. Для выдачи точки на экран используется вызов про­цедуры

PutPixel (x, у, номер_цвета); где x, у — координаты точки.

С помощью этого оператора можно построить график функции.

Построение графика функции. Чтобы построить график, не­обходимо сначала задать отрезок области определения, на ко­тором функция существует, и отобразить этот отрезок на ось Ох экрана дисплея. Точке х отрезка [а, b] из области опреде­ления функции должна соответствовать точка х экрана дисп­лея, а точке у = f(x) — значению функции — точка у1 экрана (рис. 10). Таким образом происходит масштабирование гра­фика, что дает возможность отображать на экран любой отре­зок области определения. Здесь, безусловно, надо учитывать разрешающую возможность экрана, чтобы масштаб позволил увидеть качественное поведение функции. Точки на экране, в отличие от точек геометрической прямой, имеют дискрет­ные значения. Точки оси Ох нумеруются от 0 до 640, т. е. х1 = 0, 1,2,3, ...,640.

Из пропорции (х — а) / (b — а) = 1 — 0) / (640 — 0) полу­чим расчетную формулу вычисления аргумента функции, со­ответствующего заданной точке экрана: х = а + х1 * (b - а) / xmax

где хтax = 640, если дисплей типа VGA. Для найденного зна­чения аргумента вычисляется значение функции: y=f(x)

Теперь необходимо умножить полученное значение функ­ции на коэффициент масштабирования, показывающий, сколько пикселов (физических точек экрана) содержится в выбранной единице масштаба: k = xmax / (b - а)

Получаем значение у — координату для выдачи рассчитан­ной точки графика функции на экран: у1 = у * xmax / (b - а)

Теперь следует учесть особенность расположения оси Оу на экране и перевернуть график, предполагающий традиционное положение осей координат, а так- же добавить смещение, чтобы график располагался по центру экрана:

у1 = уmax / 2 - у1

С координатами х1 и у1 точка выводится на экран. Поскольку реальные координаты графика функции, по которым она вычисляется, вещественные числа, а координаты точек экрана — целые, то результат, полученный при использова­нии в программе формулы для вычисления у1, необходимо округлить до ближайшего целого числа. Округление произво­дит функция trunc. аргумент которой — выражение вещест­венного типа: у1: = trunc (у * xmax / (b - а)).

Программа построения графических изображений должна начинаться с оператора подключения библиотеки графиче­ских процедур и специальной библиотеки, позволяющей ис­пользовать функции операционной системы (библиотеки Crt). Этот оператор располагается сразу за заголовком программы и имеет вид: uses Graph, Crt;

Сама программа состоит из описаний процедур построения изображений, описания функции, для которой строится гра­фик, и описания специальной процедуры установки графического режима. Главная программа при этом содержит опера­торы вызова этих процедур и оператор задержки изображения на экране (после построения последней точки изображение исчезает):

repeat until keypressed; {выполнять пустой цикл до нажатия любой клавиши}

Программа построения графика функции у = sin (х) на отрезке [—, ]:

program Р33;

uses Graph, Crt;

procedure Init; {установка графического режима}

var gr, gm: Integer;

begin

gr: = 0; {автоматическое распознавание типа дисплея}

InitGraph (gr, gm, ‘ ‘); {файл egavga.bgi находится в одном каталоге с turbo.ехе}

if GraphResult <> grOk then Halt (1); {обработка результата установки}

end;

function f (х: real): real; {вычисление функции f (х)}

begin

f: = sin (х)

end;

procedure grafic;

var xmax, ymax, х1, у1: integer; х, y, a, Ь: real;

begin

xmax: = 640; ymax: = 480; a: = - 3.14; b: = 3.14;

for х1: = 0 to xmax do

begin

х: = a + х1 * (b - a) / xmax;

y: = f (х); {вызов подпрограммы-функции}

у1: = trunc (y * xmax / (b - a));

у1: = ymax div 2 - у1;

PutPixel (х1, у1, 2); {выдача точки зеленым цветом}

end

end;

begin {главная программа}

Init; {вызов процедуры установки графического режима}

Grafic; {вызов процедуры построения графика функции}

repeat until keypressed

end.

0

15

0

15

15

0

15

0

15

15

15

0

Рис. 11.

При построении сложных рисунков, выдаваемых по точ­кам, можно использовать прием мозаики: нарисовать рисунок по клеточкам и заполнить таблицу целых чисел, при этом каждое число соответствует номеру цвета определенной кле­точки, а координаты клеточки соответствуют индексам эле­ментов таблицы (рис. 11).

Задание цвета. Некоторые графические операторы, такие, как построение точки, включают в себя параметр цвета, но во многих других используется текущий цвет, определенный по­следним оператором задания цвета:

SetColor (цвет);

На рисунке 12 приведена таблица цветов, где каждый цвет может быть задан как номером, так и словом (на английском).

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

Line(x1,y1,x2,y2);

При построении изображения компьютер как бы рисует лучом. Луч останавливается в последней точке изображения, координаты которой

черный

синий

зеленый

Бирюзовый

0

1

2

3

красный

малиновый

коричневый

серый-с

4

5

6

7

серый-т

голубой

зеленый-с

Бирюзовый-с

8

9

10

11

красный-с

малиновый-с

желтый

Белый

12

13

14

15

Рис. 12. Номера цветов (с-- светлый, т — темный)

запоминаются. Можно построить отре­зок, указав либо смещение от этой точки по осям х и у, либо координаты конца отрезка (начало там, где остановился луч). Смещение задается в виде целого числа, причем положитель­ное означает увеличение последней координаты на величину смещения, отрицательное — соответственное уменьшение ко­ординаты. Смещение удобно использовать для построения изображения в относительных координатах, когда достаточно указать координаты первой точки, а остальные будут пересчи­таны. Таким образом можно перемещать картинку по экрану.

Оператор построения отрезка с указанием смещения: LineRel (dx, dy);

Оператор построения отрезка с указанием последней его точки: LineTo (x, у);

Последний оператор удобен для построения графика функ­ции, которая либо резко возрастает, либо резко убывает. В этом случае изображение, построенное по точкам, терпит разрыв, так как для двух соседних аргументов два значения функции находятся далеко друг от друга. Первую точку гра­фика надо выдать оператором Put Pixel, а остальные, вычис­ляемые и строящиеся в цикле, — оператором LineTo.

Луч, строящий изображения, может перемещаться без следа. Это позволяют делать операторы, аналогичные двум последним:

MoveRel (dx, dy);

MoveTo (x, у);

Прямоугольник строится подобно отрезку: необходимо указать координаты концов любой диагонали. Прямоугольник может быть построен в виде контура или в виде закрашенной фигуры. Для контурного изображения -­ оператор Rectangle (x1, у1, х2, у2); для закрашенного Ваг(х1,у1,х2,у2);

Построение столбчатой диаграммы. На рисунке 13 пред­ставлена столбчатая (линейная) диаграмма падения успеваемос­ти некоторого учащегося по четвертям учебного года. В пер­вой четверти успеваемость составила 75%, во второй — 50%, в третьей — 25%. Построим такую диаграмму с помощью про­граммы, расположив самый высокий столбец в центральной части экрана

(его длина — 480 : 3 = 160 пикселов) и рассчитав ос­тальные пропорционально их зна­чениям относительно этого размера. По ширине вся диаграмма зани­мает также 1/3 часть, т. е. перво­начальное значение координаты х равно 210 пикселов, ширина столбцов по 35 и расстояние между ними также 35 пикселов. Для рас­чета высоты второго столбца соста­вим пропорцию 75 : 50 = 160 : х. Отсюда х = 106 (с округлением до целого). Высота третьего столбца 53 пик-

села. Поскольку нижние основания прямоугольников находятся на одно! уровне, для которого у = 320, расчет вторых координат (п оси у) производится вычитанием из 320 высоты соответствующего столбца.

Размещение текста на изображении производится с по мощью оператора:

OutTextXY (х, у, ‘текст’);

где х, у — координаты, начиная с которых будет выдан текст.

Программа построения столбчатой диаграммы имеет такую же структуру, как и программа РЗЗ.

program Р34;

uses Graph, Crt;

procedure Init; {установка графического режима}

var gr, gm: integer;

begin

gr: = 0; {автоматическое распознавание типа дисплея}

InitGraph (gr, gm, ‘ ‘); {файл egavga.bgi находится в одном каталоге с turbo.ехе}

if GraphResult <> grOk then Halt(1); {обработка результата установки} end;

procedure Diagram 1;

var х, у, х1, y1, x2, y2: integer;

begin

SetColor (14); Bar (210,160, 245, 320);

SetColor (10); Bar (210 + 2*35, 320 -106, 210 + 3-35, 320);

SetColor (2); Bar (210 + 4*35, 320 - 53, 210 + 5-35, 320);

OutTextXY(210, 320 + 30, ‘Успеваемость по четвертям’);

end;

begin

Init;

Diagram 1; repeat until keypressed

end.

Построение дуги. Для построения дуги. необходимо указать центр соответствующей окружности и у), начальный и ко­нечный углы дуги и радиус. Углы отсчитываются против часо­вой стрелки, их значение указывается в градусах (от 0 до 359). Отсчет угла производится от направленного вправо по гори­зонтали радиуса. Оператор построения дуги имеет вид:

Arc (х, у, начальный_угол, конечный_угол, радиус);

Для закрашенного сектора используется следующий опера­тор с такими же параметрами:

PieSlice (х, у, начальный_угол, конечный_угол, радиус);

Если указать значения углов соответственно 0 и 359, то по­лучится окружность или закрашенный текущим цветом круг. Окружность можно также изобразить оператором:

Circle (х, у, г);

Рассмотрим пример построения «рога изобилия», сос­тоящего из окружностей. Центры окружностей перемещаются по окружности, представляющей собой траекторию точки, од­на координата которой задается косинусом, а другая — сину­сом одного и того же угла x1/k. При k = 20 получается зам­кнутый круг, k = 10 — два круга, k = 30 — полукруг.

program Р35;

uses Graph, Crt;

procedure Init; {установка графического режима}

var gr, gm: integer;

begin

gr: = 0; {автоматическое распознавание типа дисплея}

InitGraph (gr, gm, ‘ ‘); {файл egavga.bgi находится в одном каталоге с turbo.ехе}

if GraphResult <> grOk then Halt(1); {обработка результата установки} end;

procedure Rog;

var xmax, ymax, х1, y1, х, у, r: integer;

begin

xmax: = 640; ymax: = 480;

for x1: = 1 to 125 do

begin

x: = trunc (xmax / 2 + ymax / 2 * cos (x1/20));

y: = trunc (ymax / 2 + xmax / 4 * sin (x1/20));

r: = trunc (ymax / 4 - x1);

Circle (x, y, r)

end

end;

begin

Init; Rog; repeat until keypressed

end

Построение круговой диаграммы

Диаграммы такого типа представляют собой круги, разделенные н. секторы разной площади (рис. 14) Площадь каждого сектора соответствует некоторой части, как правило, в процентном отношении, а за единицу (целое) принимается площадь всего круга. Вместо площади секто­ра можно рассчитать длину дуги. Построим круговую диаграмму изменения успеваемости, соответствующую линейной диаграм­ме на рисунке 13.

Программа имеет вид:

program Р38;

uses Graph, Crt;

procedure Init; {установка графического режима}

var gr, gm: integer;

begin

gr: == 0; {автоматическое распознавание типа дисплея}

InitGraph (gr, gm, ‘ ‘); {файл egavga.bgi находится в одном каталоге с turbo.exe}

if GraphResult <> grOk then Halt(1); {обработка результата установки} end;

procedure Diagram2;

var xmax, ymax, x1, y1, x, y, r: integer;

begin

xmax: = 640; ymax: = 480;

x: = 320; у: = 240; r: = 200; {координаты центра и радиус диаграммы}

x1: = trunc (75 * 36 / 15); {расчет длины первой дуги}

SetColor (14); PieSlice (x, у, 0, x1, r);

y1: = trunc (50’36/ 15) +x1;

SetColor (10); PieSlice (x, у, x1+1, y1, r); {вторая дуга + + первая}

SetColor (2); PieSlice (x, y, y1 +1, 359, r); {замыкание кру­га}

end;

begin

Init;

Diagram2;

repeat until keypressed

end.

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