скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Модуль Graph в программе Turbo Pascal

End.

Окружности, эллипсы и дуги

Для изображения окружностей используется процедура

Circle(x, у: Integer; Radius: Word)

Здесь (X,Y) - координаты центра окружности, Radius - ее радиус. Результатом ее работы будет окружность, если коэффициент изображения соответствует принятому BGI-драйвером для текущего графического режима. В противном случае на экране появится эллипс, вытянутый по вертикали (коэффициент сжатия больше принятого по умолчанию) или по горизонтали (коэффициент меньше принятого).

В модуле Graph представлены процедуры рисования эллипсов, дуг, секторов и процедура, позволяющая рисовать сектор, залитый по заданному шаблону. Все они запрашивают параметры StartAngle и EndAngle, которые обозначают начальный и конечный угол дуги. На рисунке изображена система графических координат, в которой мы работаем.


Положительное направление оси X (слева направо) принято за 0°, отрицательное направление оси Y - за 90°, т.е. углы отмеряются от положительного направления оси X против часовой стрелки. Все значения этих параметров даются в градусах.

Ниже перечислены процедуры рассматриваемого класса:

Рисование дуги радиуса Radius из центра с координатами (X,Y) от угла StartAngle до EndAngle:

Arc(X, Y: Integer; StartAngle, EndAngle, Radius: Word)

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

Рисование эллиптической дуги с аналогичными параметрами:

Ellipse (X, Y: Integer; StartAngle, EndAngle, XRadius, YRadius: Word)

где XRadius и YRadius - размеры горизонтальной и вертикальной полуосей соответственно. Оси эллипса могут быть только параллельны осям X и Y. Для изображения полного эллипса надо задавать углы 0° и 360°. Значение коэффициента сжатия изображение не влияет на его вид.

Угловые параметры очень неудобны для нашей системы координат - мы можем определить координаты начала и конца дуг окружности или эллипса не иначе, как только используя известные тригонометрические выражения. Но в подобных вычислениях нет необходимости, поскольку эти координаты все равно известны внутри процедур Arc, Ellips, Sector и PieSlice.

Извлечь концевые координаты дуг позволяет процедура

GetArcCoords (VAR ArcCoords: ArcCoordsType)

Тип ArcCoordsType объявлен в модуле Graph следующим образом:

TYPE

ArcCoordsType = RECORD

X, Y :Integer; {центр}
XStart, YStart :Integer; {начало}
XEnd, YEnd :Integer; {конец}

END;

Рассматриваемая процедура возвращает результаты последнего вызова процедуры рисования дуги или сектора.

Построение прямоугольников и ломаных

Для построения прямоугольника достаточно вызвать процедуру Rectangle (Х1, Y1, Х2, Y2: Integer), которая изобразит на экране прямоугольник с диагональю (X1, Y1) - (X2, Y2). Для рисования квадрата надо выбрать высоту прямоугольника так, чтобы она равнялась произведению ширины на коэффициент сжатия изображения.

Чтобы построить фигуры с большим количеством вершин (в том числе и незамкнутые), можно воспользоваться процедурой

DrawPoly (NumPoints: Word; VAR PolyPoints)

Она позволяет рисовать на экране дисплея любую ломаную, заданную набором координат некоторого множества точек. Это может быть как сложная геометрическая фигура, так и табличная математическая функция. Параметр NumPoints - это количество точек ломаной (заметим, что если необходимо нарисовать замкнутый многоугольник с N вершинами, то значение NumPoints должно быть на единицу больше числа N, а координата (N+1) –й точки должна быть такой же, как координата первой). Под бестиповым параметром PolyPoints понимается какая-либо переменная, состоящая из наборов двухкомпонентных записей. Поля каждой записи должны содержать координаты X-и Y очередной точки. В модуле Graph введен такой тип:

TYPE

PointType=RECORD

X, Y: Integer; {координаты точки}

END;

Обычно набор точек организуется как массив из записей типа PointType (и именно к такой структуре приводится значений параметра PolyPoint при работе процедуры DrawPoly). Пример построения графика функции с помощью процедуры DrawPoly приведен далее.

USES Graph; {подключен модуль Graph }
{$I initgraf.pas} {процедура инициализации}
CONST
Pi * 3.14151828; {константа Pi (замещает функцию)}
Pi2 = 2 * Pi; {различные производные от Pi...}
Pi001 = 0.01* Pi;
VAR
angle: Real;
sine_func: Array [1.201] of PointType ; { массив точек}
maxy, i: Integer;
BEGIN  
Grlnit; {инициализация графики}
maxy := GetMaxY div 2; {середина экрана по оси Y}
angle := 0.0; {задание стартовых значений}
i := 0; { счетчик точек в sine_func}
repeat { цикл заполнения sine_func }
Inc ( i );
sine_func[i].x:= Round (100 * angle) + 10;
sine_func[i].y:= Round (100 * Sin (angle)) + maxy;
angle := angle + Pi001;
until angle > Pi2;
DrawPoly (i, sine_func) ; { рисование графика синуса}
ReadLn; {пауза до нажатия ввода}
CloseGraph {закрытие графики}
END.

С помощью DrawPoly можно вывести график части функции. Для этого достаточно указать при передаваемом массиве номер n первого рассматриваемого элемента (т.е. точки), а в первом параметре — количество рассматриваемых точек, начиная с n-й, например

DrawPoly (20, sine_func [100]);

Такой вызов выведет ломаную линию по точкам с номерами 100, 101,..., 119.

При выводе количества точек, соизмеримого со значением GetMaxX, и при несплошном стиле линии может оказаться, что шаг между соседними точками соответствует ширине пробела между пунктиром. В итоге линия может вообще не проявиться на экране. Надо либо уменьшить число точек, либо избрать сплошной тип линии.

Управление цветами и шаблонами заливки (заполнения)

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

Задание типа заливки

В модуле Graph предусмотрены процедуры, с помощью которых можно заполнить (залить) определенным «узором» любую замкнутую область изображения. Вид «узора» задается так называемым шаблоном заливки. В Турбо Паскале предопределен ряд стандартных шаблонов, но кроме того, имеется возможность конструировать собственные.

Назначение шаблона заполнения (заливки) производится процедурой

SetFillStyle (Pattern: Word; Color: Word)

где параметр Pattern определяет вид шаблона заливки, a Color — его цвет. Все разрешенные значения параметра Pattern предопределены в модуле Graph в виде констант:

CONST

EmptyFill =0 { сплошная заливка цветом фона}
SolidFill =1 { сплошная заливка текущим цветом}
LineFill =2 { заливка типа ===}
LtSlashFill =3 { заливка типа ///}
SlashFill =4 { заливка жирными линиями типа ///}
BkSlashFill =5 { заливка жирными линиями типа \\\}
LtBkSlashFill =6 { заливка типа \\\}
HatchFill =7 { заливка редкой штриховкой}
XHatchFill =8 { заливка частой штриховкой}
InterleaveFill =9 { заливка прерывистой линией}
WideDotFill =10 { заливка редкими точками}
CloseDotFill =11 { заливка частыми точками}
UserFill =12 { заливка, определенная программистом}

Константа UserFill используется для определения типа заливки, который предварительно был задан в программе. Для задания своего нового шаблона необходимо воспользоваться процедурой

SetFillPattern (PattMatrix: FillPatternType; Color: Word)

передав ей в параметре PattMatrix матрицу шаблона заливки и указав цвет параметром Color. Эта процедура по действию аналогична SetFillStyle, но устанавливает только «самодельные» шаблоны. Процедура SetFillStyle удобнее, особенно в приложениях деловой графики (гистограммы, круговые диаграммы и т.п.). Задавая хотя бы раз новый шаблон, мы автоматически связываем его со значением UserFill и далее можем манипулировать всеми тринадцатью шаблонами. Если же задать UserFill, не определив перед этим новый шаблон, то функция GraphResult возвратит значение -11 (grError) и все установки вида шаблона и цвета останутся прежними. По умолчанию устанавливается шаблон SolidFill и цвет с. номером, максимальным для текущего графического режима.

В обеих процедурах назначения шаблона переменная Color определяет цвет, которым исполняется шаблон. Цвет фона при этом остается неизменным.

{ Демонстрация стандартных типов штриховки }

Program FillStDem;

Uses CRT,Graph;

Var

d,r,e,i,j,x,y : integer;

Begin

d:=Detect;

InitGraph(d,r,'');

e:=GraphResult;

if e<>grOk then

writeln(GraphErrorMsg(e))

else

begin

SetGraphMode(0);

x:=GetMaxX div 9;

y:=GetMaxY div 7;

for j:=0 to 2 do

for i:=0 to 3 do

begin

Rectangle((2*i)*x,(2*j+1)*y,

(2*i+1)*x,(2*j+2)*y);

SetFillStyle(i+j*4,j+1);

Bar((2*i)*x+1,(2*j+1)*y+1,

(2*i+1)*x-1,(2*j+2)*y-1);

end;

readln;

CloseGraph;

end

End.

Заливка областей изображения

Рассмотрим процедуры, непосредственно реализующие заливку. Имеется целый ряд процедур, рисующих графические фигуры и сразу же заполняющих их по заданному шаблону. Первая них — процедура

Bar (X1, Y1, X2, Y2: Integer)

рисует прямоугольник, внутренняя область которого залита по текущему шаблону. Она обычно используется в деловой графике для строения столбчатых диаграмм. Параметры (X1,Y1) и (X2, Y2) - координаты верхнего левого и правого нижнего углов прямоугольника. Еще более наглядное представление информации при рисовании диаграмм позволяет получить процедура

Bar3D (X1, Y1, X2, Y2: Integer; D3: Word; Top: Boolean)

Она рисует параллелепипед, лицевая сторона которого заливается по текущему шаблону, а глубина задается в пикселах параметром D3. Параметр Тор задает режим отображения верхней плоскости: True - отображать, False - не отображать. Этот параметр необходим для того, чтобы можно было рисовать столбцы, стоящие друг на друге. В модуле Graph определены две константы для нее:

CONST

TopOn = True; {верхняя плоскость нужна}
TopOff = False; {верхняя плоскость не нужна}

{ Построение параллелепипеда }

Program Bar3Dem;

Uses CRT,Graph;

Var

d,r,e : integer;

Begin

d:=Detect;

InitGraph(d,r,'');

e:=GraphResult;

if e<>grOk then

writeln(GraphErrorMsg(e))

else

begin

Bar3d( 80,100,120,180,15,TopOn);

Bar3d(150,150,190,180,15,TopOff);

Bar3d(230, 50,250,150,15,TopOn);

Bar3d(220,150,260,180,15,TopOn);

Bar3d(300,150,340,180,15,TopOff);

Bar3d(300, 50,340,150,15,TopOn);

readln;

CloseGraph;

end

End.

Следующие «заполняющие» процедуры работают с секторами окружностей и эллипсов. Рисование сектора эллипса, который будет залит цветом по текущему шаблону, осуществляется процедурой

Sector (X, Y: Integer; StartAngle, EndAngle, XRadius, YRadius: Word)

Параметры процедуры имеют тот же смысл, что и в процедурах Arc, Ellipse. для задания кругового сектора надо задавать YRadius с учетом коэффициента сжатия:

Страницы: 1, 2, 3, 4, 5


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.