русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-01-16; просмотров: 736; Нарушение авторских прав


Для построения изображения на экране дисплея используется специальная биб­лиотека подпрограмм, называемая 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 (х) на отрезке [—p, p]:

programР33;

usesGraph, Crt;

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

vargr, gm:Integer;

Begin

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

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

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

end;

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

Begin

f: = sin (х)

end;

proceduregrafic;

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

Begin

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

for х1: = 0 toxmax 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.

·   ·    
  ·   ·  
      ·  

Рис. 11.

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

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

SetColor (цвет);

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

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

Line(x1,y1,x2,y2);

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

черный синий зеленый Бирюзовый
красный малиновый коричневый серый-с
серый-т голубой зеленый-с Бирюзовый-с
красный-с малиновый-с желтый Белый

Рис. 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 <> grOkthen 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.ехе}

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

procedure Rog;

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

Begin

xmax: = 640; ymax: = 480;

forx1: = 1to125do

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}

ifGraphResult <> grOkthen 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.

 



<== предыдущая лекция | следующая лекция ==>
Методические указания по работе и задания | Методические указания по работе и задания


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.11 сек.