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

2.3 Шрифты

В модуле Graph находятся константы типов и толщины линий, а также вида, стиля и размера шрифта.

Константы управления шрифтом

const

DefaultFont = 0 ; (* Матричный шрифт 8х8 *)

TriplexFont = 1 ; (* Шрифт триплекс; файл Trip.chr *)

SmallFont = 2 ; (* Мелкий шрифт; файл Litt.chr *)

SansSerifFont = 3 ; (* Прямой шрифт; файл Sans/chr *)

GoticcFont = 4 ; (* Готический шрифт; файл Goth.chr *)

HorizDir = 0 ; (* Горизонтальной направление *)

VertDir = 1 ; (* Вертикальное направление *)

UserCharSize = 0 ; (* Размер символа, определяемый пользователем *)

LeftText = 0 ; (* Указатель слева от текста *)

RightText = 2 ; (* Указатель справа от текста *)

BottomText = 0 ; (* Указатель снизу от текста *)

CenterText = 1 ; (* Указатель по центру текста *)

TopText = 2 ; (* Указатель сверху от текста *)

2.4 Вывод функциональных зависимостей

Произвольную кривую можно вывести как, используя процедуру вывода отрезков прямых линий Line, так и процедуру вывода многоугольников DrawPoly.

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

Во-первых, начало координат следует отодвинуть от левой границы экрана для размещения шкалы размерности по оси ординат.

Во-вторых, необходимо сделать отступ от правой границы экрана для указания размерности оси абсцисс.

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

В-четвёртых, надо определить количество выводимых точек графика.

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

Program sinus1;

uses Crt, Graph;

const

N = 500; (* Количество точек графика *)

var

d, m, e, Xmax, Ymax, Xfirst, Xend, Y0, Ym: integer ;

X, Y: array [0 .. N] of word;

k: word ;

Xfront, Xback, hx, hfi, Nt, Em, Dy, SY, mY : real;

begin (* Тело программы – раздел операторов *)

clrScr;

Em := 3; Nt := 2; (* Выбор амплитуды и числа периодов синусоиды *)

Xfront := 0.15; Xback := 0.2; (* Выбор отступов графика по оси Х *)

Dy := 0.35; (* Выбор высоты графика в относительных единицах *)

Xmax := GetMaxX; Ymax := GetMaxY; (* Нахождение максимального количества пикселей по осям экрана *)

Xfirst := trunc (Xfront * Xmax); Xend := Xmax – trunc (Xback * Xmax);

(* Определение начальных b конечных координат графика *)

Y0 := Ymax div 2; (* Местоположение оси Y на экране*)

SY := Dy* Ymax / 2; (* Определение длины оси Y вверх и вниз относительно начальной координаты Y0 *)

Ym := trunc (SY); (* Перевод SY в графические координаты *)

mY := 0.1*Em/Dy; (* Выбор масштаба амплитуды синуса *)

hx := (Xend – Xfirst) / N; hfi := 2 * pi *Nt / N; (* Вычисление шагов изменения координаты Х и фазы синуса *)

d := detect; m := VGAMed;

InitGraph (d, m, ' '); (* Инициализация графического режима *)

(* Блок проведения осей *)

SetBkColor (blue); SetLineStyle (0, 0, 1); SetColor (white);

Line (Xfirst, Y0, Xend, Y0); (* Проведение оси Х *)

Line (Xfirst, Y0 – Ym, Xfirst, Y0 + Ym); (* Проведение оси Y *)

(* Блок вычисления и рисования синусоидальной функции.

Вычисление и запоминание координат точек в массивах X и Y,

вывод функции отрезками прямых линий *)

SetLineStyle (0, 0, 3); SetColor (red);

X [0] := Xfirst; Y [0] := Y0;

for k := 1 to N do

begin

X [k] := Xfirst + trunc (k*hх);

Y [k] := Y0 – trunc (mY*SY*sin (k*hfi);

Line (X [k-1], Y [k-1], X [k], Y [k] );

Delay (100);

end;

readln;

CloseGraph (* Процедура закрытия графического режима *)

end.

Принятые обозначения:

Xfront, Xback – отступы в относительных единицах от левой (передней) и правой (задней) границ экрана соответственно,

Dy – относительный размер графика по оси ординат,

Y0 – координата положения оси Y на экране,

hx – шаг по оси абсцисс,

hfi – шаг по аргументу (по углу, радиан),

Nt – количество периодов синусоиды,

Em – амплитуда синусоиды.

Процедура DrawPoly ( N: word; var Points) модуля Graph рисует текущим цветом и типом линии произвольную ломаную линию, заданную N вершинами (точками излома) с графическими координатами Points. Координаты точек излома задают парой значений типа word, первое из которых определяет горизонтальную, второе – вертикальную координаты. Points – переменная типа record. Если крайние точки совпадают, то будет вычерчен многоугольник. Поэтому полный синтаксис процедуры DrawPoly будет иметь вид, например,

type

Points = record

X, Y : word

end;

var

A: array [1..50] of Points;

N: word;

. . . . . . .

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

Пример. Программа вывода синусоидальной функции с использованием процедуры вывода многоугольников DrawPoly.

Program sinus2;

uses Crt, Graph;

const

N = 500; (* Количество точек графика *)

type

Points = record

X, Y : word

end;

var

d, m, er, Xmax, Ymax, Xf, Xe, Y0, Ym: integer ;

k: word ;

Xfr, Xb, hx, hfi, Nt, Em, Dy, SY, mY: real;

coords : array [0..N] of Points;

begin

ClrScr;

Em := 3; Nt := 2; (* Выбор амплитуды и числа периодов синусоиды *)

Xfr := 0.15; Xb := 0.2; (* Выбор отступов графика по оси Х *)

Dy := 0.35; (* Выбор высоты графика в относительных единицах*)

d := detect; m := VGAMed;

InitGraph (d, m, ' ');