Разработка алгоритма и программы комплексной графики с динамическим объектом

Автор работы: Пользователь скрыл имя, 23 Сентября 2013 в 21:13, курсовая работа

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

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

Содержание работы

Введение………………………………………………………………….4
1.Текстовый режим
1.1 Управление экраном в текстовом режиме………………………..5
1.2 Управление динамиком……………………………………………..8
2. Графический режим
2.1 Управление экраном в графическом режиме……………………..9
2.2 Создание движущихся изображений………………………………20
3.Пояснения к программе……………………………………………….27
4. Практическое задание курсовой работы……………………………29
Заключение………………………………………………………………..33
Библиографический список ……………………………………………..34

Файлы: 1 файл

kursovaya.doc

— 1.88 Мб (Скачать файл)

for j:=1 to 1500 do Delay(1000); {или NewDelay см. параграф 8.3}

SetColor(0); {установим цвет рисования - цвет фона}

Square(x,y); {стираем квадрат}

x:=x1; {заменим координаты вершин на новые}

y:=y1;

end;

CloseGraph;

End.

 

Недостатком данного способа является то, что квадрат на экране через несколько кадров уже выглядит не квадратным. Это происходит вследствие накопления ошибки округления при пересчете координат вершин. Избежать этого можно двумя способами:

1) все вычисления выполнять  в вещественной арифметике и координаты также хранить как вещественные числа, преобразуя их в целые непосредственно перед использованием в процедуре рисования;

2) пересчитывать координаты  не всех вершин, а какой-нибудь  одной и центра квадрата, восстанавливая квадрат по одной вершине и положению центра квадрата.

Способы являются взаимодополняющими, поэтому используем оба.

 

В а р и а н  т 2. Для упрощения вычислений вместо массивов, хранящих координаты вершин квадрата, будем использовать смещения этих вершин относительно центра (рис. 8.11). Соответственно процедура рисования квадрата Square 1 должна использовать именно эти параметры. Также учтем, что при масштабировании изменяются размер диагонали и положение центра, а при повороте - смещения вершин относительно центра. Ниже представлен текст программы.

Рис. 8.11. Два соседних кадра при повороте

 

Program ex;

Uses Crt,Graph;

Const r:real=100; {размер половины стороны квадрата}

Var

x, у, dx, dy, dx1, dy1, xn, yn, xc, yc, xn1, yn1:real;

gd,gm,i,j:integer;

t,k:real; {угол поворота и масштаб}

{изображение квадрата}

Procedure Square1(x,y,dx,dy:integer);

Begin

Line(x+dx,y+dy,x-dy,y+dx);

Line(x-dy,y+dx,x-dx,y-dy);

Line(x-dx,y-dy,x+dy,y-dx);

Line(x+dy,y-dx,x+dx,y+dy);

End;

{основная программа}

Begin

gd:=detect;

InitGraph(gd,gm, 'd:\bp\bgi');

{устанавливаем  начальную и конечную точки}

хп:=GetMaxX div 4;

yn:=GetMaxY div 3*2;

xc:=GetMaxX-xn;

yc:=GetMaxY-yn;

{определяем  начальные значения}

dx:=r;

dy:=0;

k:=0.95;

t:=0;

{покадровый  вывод на экран}

while (t<100) and not Key Pressed do

begin

SetColor(2); {выводим кадр}

Square1(round(xn), round(yn), round(dx), round(dy));

{масштабирование}

xn1:=xn*k+(1-k)*xc;

yn1:=yn*k+(1-k)*yc;

r:=k*r;

{поворот}

t:=t+1; {увеличиваем угол поворота}

dx1:=r*cos(t);

dy1:=r*sin(t);

for j:=1 to 5000 do Delay(1000); {приостановка}

SetColor(0); {стираем кадр}

Square1(round(xn), round(yn), round(dx), round(dy));

dx:=dx1; {заменяем параметры квадрата}

dy: =dy1

xn:=xn1

yn:=yn1

end;

CloseGraph;

end.

 

Прямая запись в видеобуфер. При программировании на экране движения объектов критичным является время перезаписи изображения: именно из-за большого времени перезаписи движение получается прерывистым.

Для уменьшения этого  времени при программировании в MS DOS часто используют прямую запись информации в видеобуфер.

Как указывалось в параграфе 8.4, формат информации в видеобуфере зависит от используемого графического режима. При использовании младших режимов VGA, на которые рассчитан Borland Pascal, видеобуфер содержит 4 бита на каждую точку, причем биты расположены в параллельных битовых плоскостях и доступ к ним напрямую существенно затруднен (программирование таких операций обычно выполняется на ассемблере). Однако существует режим VGA (режим 19: 200*320 точек 256 цветов из палитры 262144 цвета), при котором каждой точке соответствует байт (8 бит) в видеобуфере.

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

 

 

 

 

 

 

 

 

 

3. Пояснения  к программе

 

Процедура ClrScr - очищает окно, выводя в него пробелы с текущим атрибутом. После этого курсор устанавливается в верхний левый угол окна. Если окно не установлено, то очищается весь экран. Эту процедуру обычно используют после определения окна и атрибута его символов, чтобы обозначить окно на экране

 

Процедура Textcolor- устанавливает текущий цвет вывода символов в окне.

 

Процедура gotoXY(x,y:word) - перемещает курсор на знакоместо с координатами x и у.

 

Процедура Sound (f:word) - генерирует звук указанной частоты в Гц.

 

Процедура Delaу (t:word) - обеспечивает задержку на заданный интервал времени, мс.

 

Процедура NoSound - выключает динамик.

Length- определяет текущую длину строкового выражения

Detect - режим автоматического определения типа.

 

Процедура InitGraph(Var driver, mode:integer; path:string) – переключает экран в графический режим. При вызове процедуры следует объявить специальные переменные, куда занести константу драйвера и константу режима, и указать эти переменные в качестве параметров процедуры.

Процедура CloseGraph - завершает работу в графическом режиме: выгружает драйвер и восстанавливает текстовый режим.

 

 

Процедура Ellipse (х, у, stangle, endangle, radiusX, radiusY: word) - рисует эллипс или его дугу.

 

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

 

Процедура TextBackGround(color:byte) - устанавливает текущий цвет фона окна. Цвета для процедур TextColor и TextBackGround можно задавать, используя специальные константы модуля crt:

 

Black=0; {черный}   DarkGrey=8; {темно-серый}

Blue=1; {синий}    LightBlue=9; {светло-синий}

Green=2; {зеленый}   LightGreen=10; {светло-зеленый}

Cyan=3; {голубой}   LightCyan=11; {светло-голубой}

Red=4; {красный}   LightRed=12; {розовый}

Magenta=5; {фиолетовый}  LightMagenta=13; {сиреневый}

Brown=6; {коричневый}  Yellow=14; {желтый}

LightGrey=7; {светло-серый}  White=15; {белый}

Blink=128; {мерцание}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Практическое задание курсовой работы

 

Круглое кольцо вращается  с постоянной угловой скоростью  вокруг своего диаметра, расположенного параллельно оси экрана.

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

 

program kursovik;

uses Graph,crt;

var

st:string[8];

st1:string[94];

st2:string[54];

dr,mode,err,r,Rx,x1,y1,dx:integer;

Xasp,Yasp:Word;

l:byte;

begin

clrscr;

writeln('Tekstoyregim');

textcolor(10);

st:='ZADANIE:';

gotoXY(18,9);

for l:=1 to length(st)do

begin

write(st[l]);

sound(20);

delay(9900);

nosound;

end;

textcolor(15);

st1:='Krugloe kolco vraschaetsya s postoyannoj uglovoj skorostyu vokrug svoego diametra:';

gotoXY(18,12);

for l:=1 to length(st1)do

begin

write(st1[l]);

sound(68);

delay(9999);

nosound;

end;

gotoXY(18,14);

st2:=' raspolozhennogo parrallelno osiehrana.';

for l:=1 to length(st2)do

begin

write(st2[l]);

sound(21);

delay(9999);

nosound;

end;

readln;

 

writeln('to initalize graphic mode press Enter');

readln;

clrscr;

 

begin

dr:=detect;

InitGraph(dr,mode,'');

err:=GraphResult;

if err<>0 then

writeln(GraphErrorMSG(err))

else

begin

x1:=GetMaxX div 2;

y1:=GetMaxY div 2;

GetAspectRatio(Xasp,Yasp);

r:=round(3*GetMaxY*Yasp/8/Xasp);

Rx:=0;

dx:=1;

repeat

Rx:=Rx+dx;

if (Rx>100) or (Rx<1) then dx:=-dx;

Setcolor(14);

Ellipse(x1,y1,0,360,Rx,r);

Delay(10000);

Setcolor(0);

Ellipse(x1,y1,0,360,Rx,r);

until Keypressed;

SetRGBPalette(4,5,5,5);

CloseGraph;

RestoreCrtMode;

writeln('Tekstoyregim');

repeat

textbackground(9);

textcolor(10);

gotoXY(27,7);

writeln('* * * * * * * * * * * * * *');gotoXY(27,8);

writeln('*                                  *');gotoXY(27,9);

writeln('*       Vipolnila:            *');gotoXY(27,10);

writeln('*                                   *');gotoXY(27,11);

writeln('*  Ostankova Olga        *');gotoXY(27,12);

writeln('*     Valerievna              *');gotoXY(27,13);

writeln('*                                    *');gotoXY(27,14);

writeln('*    stydentka 1 kyrsa    *');gotoXY(27,15);

writeln('*                                   *');gotoXY(27,16);

writeln('*      gryppi BM-11       *');gotoXY(27,17);

writeln('*                                  *');gotoXY(27,18);

writeln('* * * * * * * * * * * * * *');

sound(540);delay(30000);nosound;

sound(480);delay(10000);nosound;

sound(420);delay(20000);nosound;

sound(480);delay(20000);nosound;

sound(540);delay(10000);nosound;delay(10000);

until keypressed;

readln;

Writeln('Graphic mode closed.Press Enter for Exit');

Readln;

End.

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

 

Все современные языки  программирования включают в себя поддержку  графики. Поэтому необходимо при  изучении темы программирования включать в изучение тему «Использование графических возможностей языка программирования», данная тема позволила мне:

    1. сделать изучение программирования эмоционально привлекательным;
    2. расширить спектр решаемых задач.

Целью данной работы была разработка анимаций.

Для этого предполагалось решить следующий класс задач:

    1. определить содержание темы;
    2. проанализировать общеобразовательные учебники, в которых рассматривается данная тема;
    3. составить методические рекомендации к изучению темы;
    4. разработать программу.

Все данные аспекты  были выполнены в ходе выполнения курсовой работы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Библиографический список

  1. Информатика(Базовый курс) С. В. Симонович, СПб: Питер, 2001г.
  2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. – М.: Наука, 1987. – 112 с.
  3. Грэхем Р. Практический курс языка Паскаль. – М.: Радио и связь. 1986 – 200 с.
  4. Йенсен К., Вирт Н. Руководство для пользователя и описание языка. – М., 1982. 151 с.
  5. Информатика(Базовый курс) С. В. Симонович, СПб: Питер, 2001г.
  6. Основы языка Turbo Pascal(учебный курс), П. И. Рудаков, М. А. Федотов, Москва: Радио и Связь, 2000г.
  7. Turbo Pascal: учитесь программировать, О. А. Меженный, Москва: изд.дом «Вильямс», 2001г

 

  1. Программирование. С. Симонович, Г. Евсеев, Москва: АСТ – ПРЕСС книга 2000г.

 


Информация о работе Разработка алгоритма и программы комплексной графики с динамическим объектом