Автор работы: Пользователь скрыл имя, 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
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:
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/
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('*
writeln('* Vipolnila: *');gotoXY(27,10);
writeln('*
writeln('* Ostankova Olga *');gotoXY(27,12);
writeln('* Valerievna *');gotoXY(27,13);
writeln('* *');gotoXY(27,14);
writeln('* stydentka 1 kyrsa *');gotoXY(27,15);
writeln('*
writeln('* gryppi BM-11 *');gotoXY(27,17);
writeln('*
writeln('* * * * * * * * * * * * * *');
sound(540);delay(30000);
sound(480);delay(10000);
sound(420);delay(20000);
sound(480);delay(20000);
sound(540);delay(10000);
until keypressed;
readln;
Writeln('Graphic mode closed.Press Enter for Exit');
Readln;
End.
Заключение
Все современные языки программирования включают в себя поддержку графики. Поэтому необходимо при изучении темы программирования включать в изучение тему «Использование графических возможностей языка программирования», данная тема позволила мне:
Целью данной работы была разработка анимаций.
Для этого предполагалось решить следующий класс задач:
Все данные аспекты были выполнены в ходе выполнения курсовой работы.
Библиографический список
Информация о работе Разработка алгоритма и программы комплексной графики с динамическим объектом