Файл: Построение графиков в Turbo Pascal.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.05.2024

Просмотров: 71

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Построение графиков вTurbo Pascal Общие сведения

Экран монитора делится на отдельные маленькие квадраты, которые называются пикселями. Каждый пиксель может иметь свой цвет. За счет окрашивания пикселя в различные цвета получается изображение. Положение пикселя определяется двумя координатами x и y в собственной системе координат, которую мы назовем «экранной». Начало экранной системы координат находится в левом верхнем углу экрана. Направление осей показано на рисунке.

Пиксели образуют матрицу (размер экрана) 640×480 точек (пикселей). Курсор выделяет один пиксель, но не отображается на экране. Начальное положение курсора – пиксель с координатами (0, 0).

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

Initgraph(var grdriver, grmode: integer; path: string) Инициализирует графический режим. Если grdriver=0, тогда драйвер выбирается по умолчанию. Grmode – значение кода этого драйвера в процедуре. Path – путь к драйверу.

Detectgraph(var graphdriver, graphmode: integer). Проверяет аппаратуру и определяет, какой графический драйвер, и в каком режиме используется.

Closegraph -Закрывает графический режим.

Moveto(x,y)

курсор перемещается в координату (x,y)

Lineto(x,y)

рисует прямую от курсора до координаты (x,y)

Setcolor(c)

c – код цвета. Меняет цвет изображений.

Setbkcolor(c)

c – код цвета. Меняет цвет фона

Здесь код цвета - выражение типа WORD, задающее текущий цвет символов или фона; в модуле GRAPH определены следующие константы для задания цвета:

Black

0

черный

DarcGray

8

тёмно-серый

Blue

1

синий

LigthBlue

9

ярко-синий

Green

2

зеленый

LigthGreen

10

ярко-зеленый

Сауп

3

голубой

LigthCyan

11

ярко-голубой

Red

4

красный

LigthRed

12

розовый

Magenta

5

фиолетовый

LigthMagenta

13

малиновый

Brown

6

коричневый

Yellow

14

желтый

LightGray

7

светло-серый

White

15

белый


Setlinestyle(x, y, z)(вид, образец, толщина) - устанавливает стиль вычерчиваемых линий.

Где x - вид - выражение типа word, означающее вид линии. Вид линии определяется следующими константами:

SolidLn = 0 ; {сплошная линия}

DottedLn = 1 ; {точечная линия}

CenterLn = 2 ; {штрих пунктирная линия}

DashedLn = 3 ; { пунктирная линия }

UserBitLn = 4 ; { вид линии определяется пользователем }

y - образец - выражение типа word, указывающее образец линии; для всех видов линий от 0 до 3 это значение задается равным нулю; для пользовательского вида задается собственный шаблон. z - толщина - выражение типа word, задающее толщину линии. Параметр толщина может принимать одно из двух значений:

NormWidth = 1 ;{толщина в одну точку}

ThickWidth = 3 ; {толщина в три точки}

Floodfill(x, y, c) – закрашивает в текущий цвет область экрана, ограниченную непрерывной линией цвета с. Текущий цвет и стиль задается с помощью SetFillStyle(p,c). (x, y) – координаты точки, начиная с которой, начинается закраска.

Setfillstyle(p,c) – задает текущий цвет и стиль. р – стиль (штриховка), с – код цвета.

Штриховка:

0 - фоном

1 -сплошная

2 - _ _ _

3 - ////

4 - толстыми///

5 - \\\\

6 - толстыми \\\

7 - ++++

8 - x x x

9- квадратами

10 - редкими точками

11 - частыми точками

12 - пользовательские

Arc(x, y: integer; startangle, endangle, radius: word). Рисует дугу от начального угла к конечному, (x, y) — центр.

Bar(x1, y1, x2, y2: integer). Рисует прямоугольник, используя текущий стиль и цвет.

Bar3d(x1,y1,x2,y2: integer; depth: word; top: boolean). Рисует параллелепипед, используя текущий стиль и цвет.

Circle(x, y: integer; radius: word) Рисует окружность, (x, y) — центр.

Cleardevice Очищает графический экран, устанавливая текущей точку (0,0).

Ellipse(x, y: integer; startangle, endangle, xradius, yrRadius : word). Рисует эллиптическую дугу от начального угла к конечному, (x, y) — центр.

Line(x1, y1, x2, y2: integer). Рисует прямую линию от точки (x1, y1) до точки (x2, y2).


Outtextxy(x, y: integer; textstring: string). Выводит текст на экран, начиная с точки (x, y).

Putpixel(x, y: integer; colorpixel: word). Высвечивает на экране точку (пиксель) с координатами (x, y) цветом colorpixel.

Rectangle(x1, y1, x2, y2: integer) Рисует рамку текущим цветом и типом линий.

Getmaxx: integer Возвращает максимальную горизонтальную координату x.

Getmaxy: integer Возвращает максимальную вертикальную координату y.


Построение графика

Требуется составить программу построения на экране дисплея графика функции y = F(x).

Решение этой задачи удобно проводить в следующем порядке:

  1. Определим границы значений аргумента в декартовых координатах, в пределах кото­рых будет строиться график X [Xmin, Xmax].

  2. Для данной области значений аргумента определим предельные значения функции: Y [Ymin, Ymax]. Эти значения необязательно должны быть точными. Они могут быть оценочными снизу и сверху соответственно.

  3. Зададим границы графического окна в графических координатах, в пределах которого будет рисоваться график: [Xgmin, Xgmax] – по горизонтали, [Ygmin, Ygmax] – по вертикали.

  4. Учесть, что Ygmin > Ygmax, поскольку в графических координатах вертикальная ось направлена вниз.

Таким образом, имеем две системы координат [x, y] – математическая или декартова система координат и [xg, yg] – экранная система координат.

Получим формулы связи между этими системами.

Нетрудно получить формулу, связывающую экранные и математические координаты:

(*)

Здесь квадратные скобки означают округление до целого значения (функция Round).

Построение графика функции может производиться либо точечным методом, либо кусочно-линейным. При первом способе график строится как последовательность точек, расположенных максимально близко. Производится «попикселевый» перебор значений аргумента xg в интервале [Xgmin , Xgmax] с выставлением точек с соответствующими координатами Yg.

При кусочно-линейном методе задается шаг ΔX и рассчитывается последовательность значений (Xi , Yi):

Данный расчет производится в декартовой системе координат.

График строится в виде отрезков прямых, проведенных через точки i, Yi), (Xi+1, Уi+1).


Точечный метод построения графика

Составим программу построения графика функции у = cos(x) для х[0; 2π], используя точечный метод.

Из условия задачи следует, что Xmin = 0, Хтax= . В этих пределах функция cos х меняется от -1 до 1. Поэтому Ymin = -1, Ymax = 1.

Выберем следующие границы графического окна:

Xgmin=10; Xgmax=400; Ygmin= 300; Ygmax=40.

График строится в виде последовательности точек с математическими координатами

Xi = Xmin + i h; Yi =cos(Xi); i = 0, ...,390.

Шаг h выбирается минимально возможным, соответствующим шагу графической сетки:

Приведенные выше формулы перевода декартовых координат в экранные примут вид:

Вместе с графиком функции строятся оси координат. Строить их будем с помощью команды рисования линии line. Ось X имеет координату Yg= 170, ось Yкоординату Xg = 10.

Uses Graph;

Var Driver,Mode: Integer;

X: Real; Xg,Yg,I: Integer;

Begin {Инициализация графического режима}

Driver:=Detect;

InitGraph(Driver,Mode,'C:\TP\BGI');

SetColor(White);{белый цвет линий}

SetBkColor(DarcGray);{задан темно-серый цвет фона}

Line(10,170,400,170); {строит ось X}

Line(10,20,10,320); {строит ось Y}

{Построение графика функции желтыми точками}

x:=0;

For I:=0 To 390 Do

Begin

Xg:=10+Round(195/(Pi)*(X));

Yg:=170-Round(130*cos(X));

PutPixel(Xg,Yg,Yellow);

X:=X+Pi/195

End;

{Разметка осей, запись функции}

OutTextXY(15,30,'Y');

OutTextXY(405,170,'X');

OutTextXY(190,40,'Y=COS(X)');

ReadLn; {задержка экрана}

CloseGraph; {выход из графики}

End.

Рисунок 1