русс | укр

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

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

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

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


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

Построение графических изображений


Дата добавления: 2014-11-27; просмотров: 813; Нарушение авторских прав


 

Модуль Graph широко применяется для построения графиков и вычерчивания линий, окружностей, эллипсов, прямоугольников и т.д. Используемые линии могут быть сплошные, штриховые и т.д. Замкнутые области можно закрашивать сплошной заливкой, штриховкой и др. Большинство процедур модуля Graph используется для построения графических изображений. При этом в начале необходимо задать стиль (тип и толщину) линии контура с помощью процедуры

 

1) SetLineStyle(Тип_линии, Образец, Толщина : Word);

Определены следующие константы и их значения для выбора Типа_линии:

Имя константы Значение Характеристика
SolidLn непрерывная
DottedLn линия из точек
CenterLn штрих–пунктирная
DashedLn пунктирная
UserBitLn определяемая пользователем

Образецдолжен быть равен 0, если используется стандартная линия (Типа 0..4) и отличен от 0, если пользователь задает свой образец.

Для параметраТолщинаопределены константы:

NormWidth = 1 – нормальная толщина,

ThicklWidth = 3 – жирная (тройная) линия.

2) Построение линий выполняется процедурами:

Line(X1,Y1,X2,Y2); – проводит линию между точками с координатами (X1,Y1) и (X2,Y2);

LineTo(X,Y); – проводит линию из текущего положения курсора до точки с координатами (X,Y).

 

3) Процедура Circle(X,Y:integer; R:Word) – строит окружность радиусом Rс центром в точке (X,Y).

 

4) Процедура Rectangle(X1,Y1,X2,Y2) – строит прямоугольник с координа­тами: (X1,Y1) – верхний левый, (X2,Y2) – нижний правый угол.

5) ПроцедураDrawPoly(колич_координат:word; var координаты_вершин); рисует многоугольник, используя текущие цвет и тип линии. Параметр координаты_вершинявляется нетипизированным и содержит координаты (X, Y) вершин многоугольника. Тип координат – Word. Параметр колич_координатзадает их число.



Замечание. Для вычерчивания n-угольника нужно задать n+1 координату, причем вершина (n+1) должна иметь координаты, совпадающие с вершиной 1. Обычно координаты_вершинзадают как типизированную константу. При этом используют определенный в модуле Graph тип PointType, представляющий собой запись, содержащую два значения: X и Y.

Ниже приведен текст программы, использующей процедуру DrawPoly для рисования шестиугольника. Обратите внимание на способ задания координат вершин в виде типизированной константы–массива.

 

Program DemoDrawPoly;

uses

Graph,Crt;

const

N=7; { Количество вершин многоугольника +1}

MultiRect: array[1..N] of PointType = {Координаты вершин}

((X: 200; Y: 100), {Координаты первой вершины и }

(X: 285; Y: 155),

(X: 285; Y: 255),

(X: 200; Y: 300),

(X: 115; Y: 255),

(X: 115; Y: 155),

(X: 200; Y: 100)); {последней (замыкающей) должны совпадать}

var

Gd, Gm, GrEr: Integer;

begin

Gd := Detect;

InitGraph(Gd, Gm, ’d:\bp\bgi’);

GrEr := GraphResult;

if GrEr = grOk then

begin

DrawPoly(N, MultiRect);

OutTextXY(50,20,’Нажмите любую клавишу...’);

Repeat Until KeyPressed;

CloseGraph;

end

else

begin

WriteLn(’Ошибка графики: ’,GrEr,’. Нажмите Enter...’);

Readln;

end;

end.

 

Сведения о других примитивах можно найти в книгах по Турбо Паскалю или в справочной системе Турбо Паскаля.

 

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

 

Пример. Написать программу построения графика заданной функции Y=f(X) для аргумента X, изменяющегося от xn до xk. Для определенности будем считать, что Y=sin(x), xn = –2π, xk = 2π.

Общие соображения по написанию программы для построения графиков приводились в п. 5.1.4. При построении графика должны быть определены масштабы – коэффициенты, с помощью которых натурные величины (X, Y) будут переводиться в графические координаты (xG, yG). В общем случае пределы изменения натурных величин: аргумента (xn, xk) и функции (Ymin, Ymax) должны быть отображены на выбранные пределы изменения графических координат:

xGnx графическое начальное,

xGkx графическое конечное,

yGny графическое начальное,

yGk –y графическое конечное.

С учетом сказанного, масштабы можно определить по формулам:

mx:=(xGk-xGn)/(xk-xn); { Масштаб по X }

my:=(yGk-yGn)/(ymax-ymin); { Масштаб по Y }

Максимальное и минимальное значения функции (хотя бы приблизительные, лучше с запасом в большую сторону) должны быть заданы пользователем. Для перехода к графическим координатам получим следующие соотношения:

xG:=Round(xGn+(x-xn)*mx);

yG:=Round(yGn+(ymax-y)*my);

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

Программа построения графика может быть такой.

 

Program PlotGrafik;

uses

Crt, Graph;

Const

xGn=20; { Константы, определяющие }

yGn=50; { область экрана, }

xGk=600; { в которую будет }

yGk=470; { выводиться график }

xn=-2*pi/2; { Начальное и }

xk=2*pi/2; { конечное значение аргумента }

ymin=-1; { Предполагаемые минимальное и }

ymax=1; { максимальное значения функции }

kT=150; { Количество точек графика }

Var

grDr, grMd, grEr : integer;

x, y, Dx : real;

xG, yG : integer;

mx, my : real; { Масштабы по X и Y }

 

Function f(x:real):Real;

begin

f:=sin(x); {Функция, для которой строится график}

end;

Begin

grDr:=Detect;

InitGraph(GrDr, GrMd, ’D:\bp\BGI’);

GrEr:=GraphResult;

if GrEr=GrOk then { Графический режим удачно открыт}

begin

SetBkColor(Blue);

ClearDevice; {Очистим экран, сделаем фон голубым}

Dx:=(xk -xn)/(kT-1); { Шаг изменения аргумента }

mx:=(xGk-xGn)/(xk-xn); { Масштаб по X }

my:=(yGk-yGn)/(ymax-ymin); { Масштаб по Y }

SetLineStyle(0,0,1); { Одинарная линия }

SetColor(Red); { Оси нарисуем красным }

Line(Round(xgn+(0-xn)*mx),ygn-20,

Round(xgn+(0-xn)*mx),ygk); {Ось Y, на ней X=0}

Line(xgn,Round(ygn+(ymax-0)*my),

xgk+20,Round(ygn+(ymax-y)*my));{Ось X, на ней Y=0}

{Изображение стрелки на конце оси X и надписи X}

MoveTo(xgk+20,Round(ygn+(ymax-y)*my));

LineRel(-8,4);

MoveTo(xgk+20,Round(ygn+(ymax-y)*my));

LineRel(-8,-4);

MoveRel(0,-25);

SetTextStyle(1,0,1); {Шрифт для обозначения осей}

OutText(’X’);

{Рисование стрелки на конце оси Y и надписи Y}

MoveTo(Round(xgn+(0-xn)*mx),ygn-20);

LineRel(-4,8);

MoveTo(Round(xgn+(0-xn)*mx),ygn-20);

LineRel(4,8);

MoveRel(0,-15);

OutText(’Y’);

SetColor(white); { Белый цвет для линии графика }

x:=xn; { Текущее значение для X }

y:=F(x); { Значение функции для этого X }

xG:=Round(xgn+(x-xn)*mx); {Графическая коорд. по X}

yG:=Round(ygn+(ymax-y)*my);{Графическая коорд. по Y}

MoveTo(xg,yg); { Курсор в эту точку экрана }

While x<=xk do {Цикл для всех значений аргумента}

begin

x:=x+dx;

y:=f(x);

xG:=Round(xgn+(x-xn)*mx);

yG:=Round(ygn+(ymax-y)*my);

LineTo(xG,yG);

end;

SetTextStyle(0,0,1); { Шрифт для вывода текста }

OutTextXY(5,5,’График функции Y=Sin(X)’);

OutTextXY(5,20,’Нажмите любую клавишу...’);

Repeat Until KeyPressed

CloseGraph; { Закрываем графический режим }

end

else

begin

WriteLn(’Ошибка графики ’,GrEr,’ ’,GraphErrorMsg(GrEr));

WriteLn(’Нажмите Enter...’);

ReadLn;

end;

End.

 

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

5) SetFillStyle(Тип_закраски, Цвет : Word); – устанавливает тип (стиль) закраски и ее цвет.

 

В Турбо Паскале определено большое количество типов закраски, которые можно задавать либо с использованием предопределенных имен констант, либо их значений. Приведем некоторые из них:

0 – заполнение области фоновым цветом;

1 – сплошное заполнение области заданным цветом;

2 – заполнение области горизонтальными линиями ;

3 – заполнение области наклонными линиями ;

4 – заполнение области толстыми наклонными линиями

. . . . . . .

11 – заполнение области частыми точками;

12 – заполнение области стилем, определяемым пользователем.

Цвет- цвет закраски (из палитры).

 

Пример.SetFillStyle(4,1);

 

6) FloodFill(x,y,Цвет_границы : Word); – закрашивает ограниченную область, используя текущий образец закраски.

Точка (x, y) является внутренней точкой закрашиваемой области. Для заполнения области, ограниченной цветом, определяемым параметром Цвет_границы, используется текущий образец закраски.

Например, программа, которая рисует концентрические окружности с координатами центра (150, 100) всеми 15-ю цветами (MaxColors) и закрашивает получившиеся кольца всеми 11-ю типами заливки и цветом, отличным от цвета контура будет иметь вид.

Program All_Colors;

Uses

Graph;

Var

Er,GraphDriver, GraphMode : Integer;

X, Y : Integer;

Radius, Color : Integer;

Begin

GraphDriver := Vga;

GraphMode := VgaHi;

InitGraph(Graphdriver, GraphMode,’’);

Er := GraphResult;

If Er=Grok then

begin

ClearDevice; {Черный цвет фона – по умолчанию }

For Color := 0 to MaxColors do

Begin

SetColor(Color);

For Radius := 1 to 11 do

Begin

Circle(150, 100, Radius*10);

SetFillStyle(Radius, MaxColors - Color);

Floodfill(150-Radius*10+5, 100, Color);

End;

{ Останов после вывода 11 окружностей одним цветом контура}

readln;

End;

CloseGraph;

end

Else

Writeln(’Ошибка графики ’,Er);

Readln;

end.

 



<== предыдущая лекция | следующая лекция ==>
Вывод текста (надписей) в графическом режиме | Запоминание и вывод изображений


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


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

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

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


 


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

 
 

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

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