Графика Турбо-Паскаля. Динамические изображения

Автор работы: Пользователь скрыл имя, 27 Февраля 2010 в 18:28, Не определен

Описание работы

Языки и системы программирования

Файлы: 1 файл

Курсовая_ЯСП.doc

— 770.74 Кб (Скачать файл)

       Процедура ClearDevice

       Функция: процедура ClearDevice устанавливает текущий указатель в исходное положение (точка с координатами (0, 0)) и очищает экран, заполняя его цветом фона.

       1.3.8 Работа с текстами в графическом режиме.

 

       Чтобы иметь возможность вывода текстовой информации, система программирования должна поддерживать работу не менее чем с одним шрифтом. Шрифт представляет собой набор символов, используемых для отображения текстовой информации. С точки зрения "потребителя", шрифты различаются начертанием символов. Программисту важен еще и способ хранения информации о форме символов. При работе с графикой Турбо Паскаля используются два вида шрифтов, различающихся своим внутренним форматом - растровые (он один) и векторные (их несколько).

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

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

       Векторные шрифты существуют в виде отдельных файлов, имеющих расширение .chr и расположенных в том же каталоге BGI Турбо Паскаля, что и графические драйверы. Чтобы программы выполнялись правильно, им должны быть доступны файлы со всеми необходимыми шрифтами. Если графическая программа не сможет найти необходимый шрифт, то это приведет к сбою в работе в ее работе, будет просто использоваться шрифт, заданный по умолчанию. "Стандартные" (т.е. входящие в исходную поставку Турбо Паскаля) векторные шрифты не содержат русских букв. Впрочем, существуют векторные шрифты, созданные программистами и поддерживающие работу с русским алфавитом. Их можно приобрести и установить в Турбо Паскаль.

       Для работы с текстами в Турбо Паскале имеются несколько процедур. 

       Процедура SetTextStyle

       Функция: Устанавливает текущий тип текстового шрифта, его направление, размер.

       Описание: SetTextStyle(шрифт, направление,

                размер символа).

       Шрифт принимает одно из следующих значений:

       DefaultFont=0 - растровый шрифт;

       TriplexFont=1 - векторный шрифт;

       SmallFont=2 - векторный шрифт;

       SanSerifFont=3 - векторный шрифт;

       GothicFont=4 - векторный шрифт.  

       Направление текста принимает одно из двух значений:

       HorizDir=0 - слева направо;

       Vertyr=1 - снизу вверх.   

       Размер символа принимает значение от 0 до 10. Значение 1 соответствует шрифту 8х8, а 10 соответствует 80х80. 

       Процедура SetTextJustify

       Описание: SetTextJustify(horj, verj).

       Примечания: устанавливает выравнивание в горизонтальном (horj) и вертикальном (verj) направлениях.

       Типы выравнивания:

       Горизонтальное:

       LefText=0 - влево;

       CenterText=1 - по центру;

       RightText=2 - вправо. 

       Вертикальное:

       BottomText=0 - вниз;

       CenterText=1 - по центру;

       TopText=2 - вверх. 

       Процедура GetTextSettings

       Функция: Возвращает текущий тип текстового шрифта, его направление, размер и выравнивание, установленные с помощью процедур SetTextStyle и SetTextJustify.

       Описание:

       SetTextSettings( var TextInfo: TextSettingsType). 

       Процедура OutText

       Функция: Пересылает строку на устройство вывода в то место, в котором находится текущий указатель.

       Описание: OutText(строка:string).

       Примечания: Параметр "строка" выводится в месте расположения текущего указателя. При этом используются текущие параметры выравнивания. Если строка слишком длинная и не умещается на экране или в текущей области просмотра, то она усекается. Если активен шрифт, используемый по умолчанию (растровый шрифт), а строка слишком велика и не умещается на экране, то она не выводится.

       В данной процедуре используется шрифт, установленный процедурой SetTextStyle. Процедура OutText использует параметры вывода, установленные процедурой SetTextJustify (выравнивание, центрирование и др.). Текущий указатель изменяется процедурой OutText только в том случае, если направление вывода текста горизонтальное и задано выравнивание по левой границе. Направление вывода текста (горизонтальное или вертикальное) задается с помощью процедуры  SetTextStyle, а выравнивание - с помощью процедуры SetTextJustify. 

       Процедура OutTextXY

       Функция: Пересылает строку на устройство вывода.

       Описание: OutTextXY(X, Y, текст_строка).

       Примечания: Строка, заданная параметром "текст_строка", выводится в точке (x, y). Если строка слишком длинная и выходит за пределы экрана или текущей области просмотра, то она усекается.

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

       1.4 Графические окна

 

       Турбо Паскаль позволяет пользователю в любом месте экрана определить окно. Когда в окно производится запись, оно ведет себя точно так, как если бы вы использовали полный экран, оставшаяся часть экрана при этом неприкосновенна. В графическом режиме окна формируются с помощью процедуры SetViewPort.

       Описание: SetViewPort(x1, y1, x2, y2, Clip).

       Примечания: Точка (x1, y1) задает верхний левый угол области просмотра, а точка с координатами (x2, y2) определяет правый нижний угол области просмотра. Булевская переменная Clip определяет, будет ли изображение отсекаться текущими границами области просмотра. Определены следующие константы: ClipOn:=True; ClipOff:=False.

       Процедура SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn) всегда задает в качестве области просмотра все поле графического экрана.

       Все графические команды зависят от текущей области просмотра.

       1.5 Программирование движущихся объектов

 

       Очень часто хочется "оживить" картинку, "заставить" что-нибудь двигаться. Как сделать это, не используя анимационные программы средствами модуля Graph? Движение простых объектов может быть имитировано с помощью некоторых не очень сложных приемов.

       I способ. Имитация движения объекта на экране за счет многократного выполнения программой набора действий: нарисовать - пауза - стереть (нарисовать в том же месте цветом фона) - изменить координаты положения рисунка.

       Перед началом составления программы надо продумать описание «двигающегося» объекта, характер изменения координат, определяющих текущее положение объекта, диапазон изменения и шаг.

       II способ. Иллюзия движения создается при помощи специальных процедур и функций.

Функция ImageSize(x1, y1, x2, y2: integer) возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения, где x1,y1 - координаты левого верхнего и x2, y2 - правого нижнего углов фрагмента изображения.

Процедура GetImage(x1, y1, x2, y2:integer, var Buf) помещает в память копию прямоугольного фрагмента изображения, где x1, ..,y2 - координаты углов фрагмента изображения, Buf - специальная переменная, куда будет помещена копия видеопамяти с фрагментом изображения. Buf должна быть не меньше значения, возвращаемого функцией ImageSize с теми же координатами.

Процедура PutImage(x1, y1, x2, y2:integer, var Buf, Mode:word) выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой GetImage. X, Y - координаты левого верхнего угла того места на экране, куда будет скопирован фрагмент изображения; Buf -специальная переменная, откуда берется изображение, Mode - способ копирования. Координаты правого нижнего угла не указываются, так как они полностью определяются размерами выводимой на экран копии изображения. Координаты левого верхнего угла могут быть любыми, лишь бы только копия уместилась в пределах экрана (если копия не размещается на экране, то она не выводится, и экран остается без изменений). Параметр Mode определяет способ взаимодействия размещаемой с уже имеющимся на экране изображением

 

       

       Раздел 2. Практическая часть

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

 

     Исходные данные:

x,y - координаты стартовой точки, тип целый.

d,t - переменные для инициализации графического режима 

      Промежуточные данные:

 a,b - переменные для построения линии моря, тип целый

y0 - координата для высоты положения линии моря, тип целый 

     Использование модулей:

  1. crt включает в себя процедуры очистки (clrscr) и задержки экрана(readkey);
  2. graph позволяет провести инициализация графического режима с помощью процедуры InitGraph;  включает в себя процедуры и функции, позволяющие вырисовывать графические объекты и применять к ним различные типы, стили и цвета оформления.
 

       Алгоритмическая структура:

  1. цикл прямого пересчета for…to…do;
  2. цикл с предусловием while … do
 

       Алгоритм программы:

    1. Задание имени программы
    2. Открытие модулей
    3. Написание процедуры «море» с использованием цикла прямого пересчета
    4. Инициализация графического режима
  1. В цикле с предусловием произвести рисование волны и задание движения объекта по траектории
    1. Рисование графического объекта
    2. Задержка выполнения программы
    3. Установка шага движения
    4. Закрытие графического режима
 

     Листинг программы: 

      program corablik;

      uses Graph, Crt;

      var  d,t,x,y,y0,a,b: integer

        procedure more(a,b:integer);

       begin

        moveto(0,y0);

        setcolor(blue);

        for a:=0 to 680 do

         begin 

         b:=y0-round(sin(a*pi/180)*30;

           lineto(a,b); 

        end;

       end;

      Begin  

       d := Detect;  t:=2; 

       InitGraph(d, t, ''); 

       y0 := 250; 

          x:=600; 

          while x>=0 do 

           begin 

            cleardevice; 

            more(a,b); 

            setcolor(white); 

            y:=y0-40-round(sin(x*pi/180)*30); 

            MoveTo(x - 60, y + 40); 

Информация о работе Графика Турбо-Паскаля. Динамические изображения