Автор работы: Пользователь скрыл имя, 16 Сентября 2013 в 10:24, реферат
Основная цель данной работы - изучение основ языка программирования , cоздание компьютерных программ и графических изображений на языке Turbo Pascal.
Задачи:
Организация ввода и вывода данных.
Изучение основных правил использования чисел и строк, управляющих конструкциями и циклами, переменных, констант и комментариев.
Создание графических изображений, а также интерфейс пользователя и отладку работы программы.
Введение…………………………………………………….2
Рождение Паскаль………………………………………….3
Графические возможности языка Паскаль ……………….4
Работа в графическом видеорежиме. Общий обзор….......4
Инициализация графического режима……………………5
Управление экраном и окнами…………………………….6
Управление цветом и фоном……………………………….7
Построение простых графических изображений…………7
Реализация имитации движения графических объектов…10
Заключение………………………………………………….11
Литература…………………………………………………..12
Приложение ………………………………………………...13
Для выхода из
графического режима
При частой работе
с графикой процесс
В графическом режиме поддерживается концепция окон. Окно представляет собой прямоугольную область экрана со своей относительной системой координат. По умолчанию окно занимает весь экран, значения координат его левого верхнего и правого нижнего углов устанавливаются автоматически процедурой инициализации (например, (0,0) и (640,480)).
Чтобы стереть все изображения на экране, т. е. очистить его, используется процедура без параметров С1еarDevice или процедура GraphDefauits, которая не только очищает экран, а и выполняет все стартовые установки графических параметров.
Процедура SetViewPort (X1,Y1,X2,Y2 : integer; Clip: boolean); служит для организации окон. Здесь XI,Y1 —координаты левого верхнего угла, X2,Y2 — координаты правого нижнего угла. Параметр Clip определяет, будут ли фрагменты изображения отсекаться при попадании за пределы окна (Clip = True или Clip = ClipOn) или нет (Clip = False или Сliр = СlipOff). После создания окна началом координат станет верхний левый угол окна, который будет иметь координаты (0,0).
Процедура CiearViewPort;
используется для очистки окна. Текущее
окно при этом заполняется фоновым цветом,
а текущий указатель устанавливается
в точку с координатами (0,0). Напомним, что
это координаты во внутренней системе
координат, связанной с данным окном, а
не в системе координат полного экрана.
Перейти к системе координат полного экрана
можно с помощью процедуры ClearDevice или задав
в процедуре установки окна максимально
возможные значения: SetViewPort(0,0,GetMaxX,
program Prim_2;
Uses Graph;
Var Driver, Mode: integer;
Procedure GrInit;
Begin
Driver:= Detect; {автораспознавание драйвера}
InitGraph (Driver, Mode,'');
If GraphResult<>0 then
Begin
Writeln ('Ошибка инициализации!');
Writeln ('Работа программы прервана');
Halt (1) {Остановить выполнение программы с кодом завершения - 1}
End
End;
Begin
GrInit; {графические действия}
{Устанавливаем размеры "
Setviewport(1,1,650,450,true); {Рисуем прямоугольник}
Rectangle(50,50,200,200); {Меняем цвет линий для следующей фигуры}
Setcolor(11); {Рисуем прямоугольник}
Rectangle(300,300,400,350); {Меняем цвет линий для следующей фигуры}
Setcolor(5);{Рисуем прямоугольник}
Rectangle(400,30,600,250); {Компьютер ожидает нашего нажатия клавиши Enter}
Readln; {Очістка экрана}ClearViewPort;
{Компьютер ожидает нашего
CloseGraph
End.
В следующей программе
изменили только одну строку Setviewport(1,1,650,450,true)
нàSetviewport(1,1,250,250,
Во время инициализации графического режима устанавливается палитра цветов. Палитрой называется максимальный набор цветов, поддерживаемых BGI-драйвером. Она включает 16 цветов, пронумерованных от 0 до 15, которые используются по умолчанию в режимах 640x480 для VGA (и для EGA) как в текстовом, так и в графическом режиме. Названия цветов на английском и русском языках и их номера описаны в таблице.
Имя цвета |
Номер цвета |
Название цвета |
Black |
0 |
Черный |
Blue |
1 |
Синий |
Оreeon |
2 |
Зеленый |
Cyan |
3 |
Голубой |
Red |
4 |
Красный |
Magenta |
5 |
Фиолетовый |
Brown |
6 |
Коричневый |
LightGray |
7 |
Светло-серый |
DarkGray |
8 |
Темно-серый |
LighiBlue |
9 |
Светло-синий |
LightGreen |
10 |
Светло-зеленый |
LightCyan |
11 |
Светло-голубой |
LightRed |
12 |
Светло-красный |
LightMagenla |
13 |
Сетло-филоетовый |
White |
14 |
Белый |
Yellow |
15 |
Желтый |
Для установки цвета изображения и окна применяются процедуры SetColor и SetBkColor.
Процедура SetColor((ueeT) : word); служит для задания цвета, которым будут обозначены контуры фигуры или текста. Если в качестве цвета указан недопустимый номер цвета, то текущий цвет не изменяется.
Процедура SetBkColor(<цвет>:word); устанавливает новый цвет фона.
Построение простейших графических изображений
Отображение точки
Какие бы изображения не выводились на экран, все они построены из точек. Процедура PutPixel(X,Y:integer; Color:word); отображает точку на экране, где X и Y — экранные координаты точки. Color - её цвет.
Приведем пример программы, при выполнении которой создается интересный визуальный эффект путем заполнения экрана множеством точек различных цветов.
Пример.
Uses Crt, Graph;
Var Driver,Mode : integer; Color: word;
X,Y:word; Procedure GrInit;
Begin
Driver:= Detect; {автораспознанание драйвера} InitGraph(Driver,Mode,'');
If GraphResult<>0 then Begin
Writeln ('Ошибка инициализации!');
Writeln ('Работа программы прервана');
Halt (1) {остановить выполнение программы с кодом завершения — 1}
End
End;
Begin
GrInit;
Color: =0; Randomize; Repeat
{выберем случайным образом координаты точки}
X: = Random(GetMaxX);
Y: = Random(GetMaxY);
PutPixel(X,Y,Color), {вывод точки}
Inc(Color); {изменение цвета}
{проверим, не превышает ли значение цвета максимального значения, которое определяет функция GetMaxColor}
If Color = GetMaxColor Then Color: =0;
Until KeyPressed; {повторять до нажатия любой клавиши)
ClearDevice;
{CloseGraph}
End.
Отображение отрезков прямых линий
Процедура Line(Xl,Yl,X2,Y2: integer); выводит на экран отрезок прямой линии. Здесь (X1,Y1)—координаты начальной точки, a (X2,Y2) — координаты конечной точки отрезка.
Для построения отрезков можно применять также следующие процедуры:
LineTo(X,Y); — проводит отрезок из текущей точки до точки с координатами (X,Y);
LineRel(dX,dY|; — проводит отрезок из текущей точки до точки, удаленной от нее на расстояние (dX,dY). Линии можно вычерчивать самых различных стилей: тонкие, широкие, штриховые, пунктирные и т. д. Процедура SetLineStyle(<тип линии> :word;<yзop(maблон)> : word;(толщина линии) :word); производит установку стиля. Константы типа линий и их толщины приведены в таблице.
Константа |
Характеристика линий | |
SolidLn |
0 |
Сплошная линия |
DottedLn |
1 |
Точечная линия |
CenterLn |
2 |
Штрихпунктирная линии |
DashedLn |
3 |
Пунктирная линия |
UserBitLn |
4 |
Тип линии, определяемый пользователем |
NormWidth |
1 |
Нормальная толщина линий |
ThickWidth |
3 |
Жирная линия |
Если тип линии не равен UserBitLn, то параметр "узор(шаблон)" не используется и обычно задается равным нулю, например SetLineStyle(0,0,3) — стиль линии — сплошная, жирная.
Построение прямоугольников
Процедура Rectangle(Xl,Yl,X2,Y2: integer); строит изображение прямоугольника на плоскости. Здесь XI,Y1— координаты левого верхнего угла, X2,Y2 — координаты правого нижнего угла прямоугольника. При этом используется текущий цвет (SetColOf) и стиль линии (SetLineStyle). Область внутри прямоугольника не закрашена и совпадает по цвету с фоном.
Процедура Bar(Xl,Yl,X2,Y2:integer); позволяет строить более эффектные прямоугольники. Она рисует прямоугольник, внутренняя область которого залита по текущему шаблону. Обычно используется в деловой графике для построения столбиковых диаграмм, а также для "закраски" графического окна, чтобы фон графического окна не сливался с общим фоном экрана.
Рассмотрим, как производить «заливку» замкнутых областей экрана с помощью различных узоров, т. е. как выбрать узор (шаблон) и цвет заполнения фигуры. Комбинацию узор-цвет принято называть стилем заполнения.
Процедура SetFillStyle(<шаблон>:word;<
Константы шаблонов закраски приведены в таблице.
Константа |
Значение |
Описание узора |
EmptyFill |
0 |
Закраска области фоновым цветом |
SolidFill |
1 |
Сплошная закраска области текущим цветом |
LineFill |
2 |
Закраска линиями — |
LtSlashFill |
3 |
Закраска линиями /// |
SlashFill |
4 |
Закраска жирными линиями/// |
BkSlashFill |
5 |
Закраска жирными линиями\\\ |
LtBkSlashFill |
6 |
Закраска линиями /// |
HatchFill |
7 |
Закраска редкой штриховкой |
XhalchFill |
8 |
Закраска частой штриховкой (в обоих направлениях) |
InterleaveFill |
9 |
Закраска прерывистой линией |
WideDotFill |
10 |
Закраска линией из редких точек |
CloseDotFill |
11 |
Закраска линией из частых точек |
UserFill |
12 |
Закраска, определяемая программистом |
Процедура FloodFill(X,Y:integer; Border: word); заполняет ограниченную область текущим цветом и стилем заполнения (SetFillStyle). Граница закрашиваемой области высвечивается цветом, заданным в Border.
Если точка (X,Y) находится внутри области, то эта область закрашивается, если же она расположена вне области, то заполняется внешняя часть области.
Построение дуг, эллипсов и окружностей
Процедура Arc(X,Y:integer; al, a2,R: word); строит дугу. Здесь (X,Y)—центр окружности дуги, al, a2 — начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки, R—радиус. Если al=0o, а а2=360°, то вычерчивается полная окружность.
Процедура Ellipse (X,Y: integer; al,a2,Rx,Ry: word); предназначена для построения эллиптических дуг. Здесь (X,Y)—центр эллипса, al,a2 — начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки, Rx и Ry — горизонтальная и вертикальная полуоси. Если al=0°, а а2 = 36О, то вычерчивается ПОЛНЫЙ ЭЛЛИПС.
Процедура FillEllipse(X,Y: integer; Rx,Ry: word); строит полный закрашенный эллипс.
Процедура Circle(X,Y: integer; R: word); выводит на экран изображение окружности с центром (X,Y) и радиусом R. Окружность рисуется цветом, заданным SetColor.
Процедура PieSlice(X,Y: integer; al, n2,R: word); выводит на экран изображение закрашенного сектора круга, используя и качестве центра круга точку (X,Y), начальный угол al, конечный угол a2 и радиус R. Контур сектора высвечивается текущим цветом. При заполнении сектора используются шаблон и цвет, установленные процедурой SetFillStyle. Если al =0°, а а2=360°, то на экран выводится закрашенная окружность.
Процедура Sector(X,Y: integer; al,a2,Rx;Ry: word); строит закрашенный сектор эллипса.
Реализация имитации движения графических объектов
Создать видимость движения на экране можно двумя способами. Первый способ заключается в том, что имитация движения объекта на экране создаётся за счёт многократного выполнения программой напора действий:
нарисовать —
пауза — стереть рисунок (
Перед началом составления
программы надо продумать
Второй способ имитации движения рисунка или его части состоит и его запоминании в отдельной области оперативной памяти с тем, чтобы в дальнейшем быстро восстановить это изображение в другом месте экрана.