Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции ИВАНОВ Книга Паскаль.doc
Скачиваний:
5
Добавлен:
18.11.2019
Размер:
1.93 Mб
Скачать

Стиль линии

Таблица 6.4

Константа

Значение

Описание

SolidLn

DottedLn

CenterLn

DashedLn

UserBitLn

0

1

2

3

4

Непрерывная линия

Линия из точек

Линия из точек и тире

Штриховая линия

Тип пользователя

Толщина линии

Таблица 6.5

Константа

Значение

Описание

NormWidth

ThickWidth

1

3

Нормальная толщина (1 пииксель)

Жирная линия

6.2.4 Построение графических фигур

  1. Построение прямоугольников

Процедура Rectangle строит прямоугольник, внутренняя область которого не закрашивается и совпадает по цвету с фоном.

Rectangle (X1, Y1, X2, Y2 : integer);

где X1, Y1 – координаты левого верхнего угла прямоугольника,

X2, Y2 - координаты правого нижнего угла прямоугольника.

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

for i:=1 to 100 do

begin

SetColor(Green); {Установка цвета}

Rectangle (200, random(300),250, 300); {i-й прямоугольник}

Delay(50); {Задержка}

ClearDevice; {Очистка экрана}

end;

Более эффектные для восприятия прямоугольники можно строить с помощью процедуры Bar, которая рисует закрашенный столбец. Цвет закраски устанавливается с помощью SetFillStyle.

Bar (X1, Y1, X2, Y2 : integer);

Например,

SetFillStyle(1,3);

Bar (10,10,50,100);

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

Еще одна весьма эффектная процедура, которая вычерчивает трехмерный закрашенный прямоугольник (параллелепипед):

Bar3D (X1, Y1, X2, Y2 : integer; Depth : word; Top : boolean);

где Depth – представляет собой число пикселей, задающее глубину трехмерного контура;

Top – определяет, строить над прямоугольником вершину (Top:=True) или нет (Top:=False).

Например,

SetFillStyle(1,3);

Bar3D (10, 10, 50, 100, 10, True);

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

  1. Построение дуг и окружностей

Д ля задания углов используется полярная система координат (см. рис.6.2).

Рис.6.2. Полярная система координат

Процедура вычерчивания окружности текущим цветом имеет следующий формат:

Circle (X, Y, Radius :word);

где X, Y – координаты центра окружности,

Radius – ее радиус.

Например.

SetColor(Green);

Circle (450, 100, 50);

обеспечит вывод окружности зеленого цвета с радиусом 50 пикселей и центром в точке (450, 100).

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

Arc(X, Y : integer; StAngle, EndAngle, Radius : word);

где X, Y – координаты центра окружности,

StAngle и EndAngle – начальный и конечный угол,

Radius – ее радиус.

Если StAngle=0 и EndAngle=359, то вычерчивается полная окружность.

Например.

SetColor(Red);

Arc (450, 100, 0, 90, 50);

позволит вывести дугу красного цвета от 0 до 90 градусов.

Для построения эллиптических дуг предназначена процедура

Ellipse(X,Y : integer; StAngle, EndAngle : word, xR, yR : word);

где X, Y – центр эллипса в линейных координатах,

xR, yR – горизонтальные и вертикальные оси.

Если StAngle=0 и EndAngle=360, то вычерчивается полный эллипс.

Например.

SetColor(LightCyan);

Ellipse (100, 100, 0, 360, 30, 50);

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

Чтобы создать закрашенный эллипс используется специальная процедура FillEllipse, а заполнитель устанавливается процедурами SetFillStyle и SetColor.

FillEllipse(X,Y : integer; xR, yR : word);

Например.

SetFillStyle(10, 2); {Установка стиля заполнения}

SetColor(LightCyan); {Цвет для вычерчивания эллипса}

Ellipse (100, 100, 0, 90, 50);

В этом фрагменте эллипс вычерчивается ярко-красной кривой и заполняется приведенной в таблице 6.3 стандартной маской 10 (редкие точки) зеленого цвета.

Для создания и заполнения сектора в эллипсе используется процедура

Sector(X,Y : integer; StAngle, EndAngle, xR, yR : word);

где X, Y – центр,

xR, yR – горизонтальные и вертикальные радиусы.

Сектор вычерчивается от начального угла StAngle до конечного угла EndAngle текущим цветом и заполняется стилем, заданной процедурой SetFillStyle.

Например.

SetFillStyle(11, 9);

SetColor(13);

Sector(300, 150, 180, 135, 60, 70);

6.3 РАБОТА С ТЕКСТОМ

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

Процедура OutText выводит строку текста, начиная с текущего положения курсора.

OutText(Textstring : string)

где Textstring – константа или переменная типа string.

Например, OutText(‘Вводите данные: ‘);

Явный недостаток этой процедуры – нельзя указать произвольную точку начала вывода. Его можно устранить с помощью процедуры OutTextXY.

OutTextXY(X,Y : integer; Textstring : string)

где X, Y – координаты точки начала вывода текста.

Например,

OutText(60,100, ‘Для продолжения нажмите любую клавишу… ‘);

выводит сообщение “Для продолжения нажмите любую клавишу”, начиная с точки 60, 100.

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

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

SetTextStyle(Font : word; Direction : word, CharSize : word);

где Font – выбранный шрифт,

Direction – направление (горизонтальное или вертикальное),

CharSize – размер выводимых символов.

Возможные значения двух первых параметров представлены в таблице 6.6.

Шрифты

Таблица 6.6

Константа

Значение

Описание

DefaultFont

TriplexFont

SmallFont

SansSerifFont

GothicFont

0

1

2

3

4

8x8 битовый шрифт

Штриховые шрифты

Малый шрифт

Сансериф

Готический

Константы ориентации

HorizDir

VertDir

0

1

Слева направо

Снизу вверх

В качестве примера шрифтом DefaultFont выведем две строки: вертикальную и горизонтальную разной величины:

SetTextStyle(0, 1, 1) {Буквы стандартной величины}

OutTextXY(200,200, ‘Вертикальная строка‘);

SetTextStyle(0, 1, 1) {Размер букв увеличен}

OutTextXY(200,200, ‘Горизонтальная строка‘);

Пример. Нарисовать эмблему. В левой верхней части графического экрана на черном фоне нарисовать голубой квадрат, а в нем – черный круг, закрашенный желтым цветом. В центре эмблемы черными буквами написать слово «АГНИ».

program Emblema;

uses Crt, Graph;

var driver, mode : integer;

begin

clrscr;

driver:=detect;

initgraph(driver, mode,’’);

setbkcolor(0);

setcolor(3);

rectangle(100, 0, 300, 200);

setfillstyle(1, 3);

floodfill(200, 100, 3);

setcolor(14);

circle(200, 100, 100);

setfillstyle(1, 14);

floodfill(200, 100, 14);

setcolor(0);

circle(200, 100, 100);

settextstyle(0, 0, 3);

outtextxy(135,100, ‘АГНИ‘);

readln

end.

Пример. Нарисовать разными цветами десять концентрических окружностей с общим центром в точке с графическими координатами (320; 240), и описать вокруг них красный прямоугольник.

program Circle10;

uses Crt, Graph;

var driver, mode, r : integer;

begin

clrscr;

driver:=detect;

initgraph(driver, mode,’’);

r:=10; {радиус первой окружности 10 пикселей}

while r<=100 do

begin

setcolor(random(15));

circle(320, 240, r)

r:= r+10

end

setcolor(4);

rectangle(220, 140, 420, 340);

readln

end.

Пример. Написать программу рисования графика функции y=2Sin(2x)+1 на отрезке[0;2], протабулировав функцию с шагом h=0,1.

Program GrafikSin;

uses Crt, Graph;

const a=0; b=2*pi;

h=0.1; h1=5;

x0=60; y0=240; M=50;

var driver, mode, x1, y1 : integer;

x, y : real;

function f(x:real) : real;

begin

f:=2*sin(2*x)+1

end;

begin

clrscr;

driver:=detect;

initgraph(driver, mode,’’);

setcolor(14);

setbkcolor(1);

line(20, y0, 600, y0); {Координатная ось х}

line(x0, 440, x0, 20); {Координатная ось y}

x:=a;

x1:=x0 + trunc(M*x);

{x, y – математические координаты}

y:=f(x);

y1:=y0 - trunc(M*y);

{x1, y1 – графические координаты}

moveto(x1, y1);

setcolor(15);

while x<=b do

begin

y:=f(x);

y1:=y0 - trunc(M*y);

lineto(x1, y1);

x1:= x1+h1;

x:= x+h;

end

readln

end.

6.4 ПОНЯТИЯ ОБ АНИМАЦИИ

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

Для имитации движения объекта на экране нужно выполнить такой циклический алгоритм:

  1. Нарисовать объект в нужной точке, сделать паузу.

  2. Удалить объект, закрасив его цветом фона.

  3. Изменить координаты объекта.

  4. Возвратиться к пункту 1.

Пример. Изобразить движение солнца на голубом небе в горизонтальном направлении.

program Sonce;

uses Crt, Graph;

var driver, mode, r : integer;

begin

clrscr;

driver:=detect;

initgraph(driver, mode,’’);

i:=0;

while i<=590 do

begin

setcolor(14); {цвет солнца}

setbkcolor(3); {цвет неба}

setfillstyle(1, 14); {рисуем солнце желтым цветом}

circle(i, 100, 50);

floodfill(i, 100, 14);

delay(200);

setfillstyle(1, 3); {закрашиваем солнце цветом фона - голубым}

setcolor(3);

circle(i, 100, 50);

floodfill(i, 100, 3);

i:= i+5

end

readln

end.

СПИСОК ЛИТЕРАТУРЫ

  1. Алаев Ю.А., Гладков В.П., Козлов О.А. Практикум по алгоритмизации и программированию на языке Паскаль. М.:Финансы и статистика, 2004.

  2. Глинский Я.Н., Анохин В.Е., Ряжская В.А. Turbo Pascal 7.0 и Delphi. СПб.:ДиаСофтЮП, 2003.

  3. Культин Н. Turbo Pascal в задачах и примерах. СПб.: БХВ - Петербург, 2003.

  4. Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0. Киев: Век+, 2000.

  5. Немнюгин С.А., Перколаб Л. Изучаем Turbo Pascal. СПб.: Питер, 2003.

  6. Немнюгин С.А., Turbo Pascal. Практикум. СПб: Питер, 2001.

  7. Попов В.Б. Паскаль и делфи. Учебный курс. М.: Питер, 2005.

  8. Рапаков Г.Г., Ржеуцкая С.Ю. TURBO PASCAL для студентов и школьников. СПб.: БХВ - Петербург, 2004.

  9. Семакин И.Г., Шестаков А.П. Основы программирования. М.: Академия 2003.

  10. Шпак Ю.А., Turbo Pascal 7.0 на примерах. Киев: Юниор, 2003.

ОГЛАВЛЕНИЕ

Методика подготовки 1

и решения задачи на ПК 1