WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 |
Министерство общего и профессионального образования Российской Федерации Уфимский государственный авиационный технический университет Кафедра технической кибернетики МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторным работам по курсу "Интерактивная машинная графика" для подготовки инженеров по специальности 220200 "Автоматизированные системы обработки информации и управления" Часть 1 "Синтез графических образов простыми средствами" Уфа 1997 2 Составитель: О.В. Трушин УДК 681.3.06 Методические указания к лабораторным работам по курсу "Интерактивная машинная графика" для подготовки инженеров по специальности 220200 "Автоматизированные системы обработки информации и управления" Часть 1. "Синтез графических образов простыми средствами" / Уфимск. гос. авиац. техн. унив-т;

Сост. О.В. Трушин. - Уфа, 1997. - 34 с.

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

Ил. 15. Библиогр.: 10 наимен.

Рецензенты: В. Н. Мукасеева М. Е. Сидоров 3 Содержание Стр.

Лабораторная работа № 1.

Приемы синтеза динамических образов на плоскости................. 4 Лабораторная работа № 2.

Синтез сложных динамических образов....................................... 9 Лабораторная работа № 3.

Простые приемы мультипликации................................................ 17 Лабораторная работа № 4.

Мультипликация с запоминанием части экрана.......................... 26 Список литературы...................................................................... 31 Приложение А Типовые графические функции BGI............................................. Лабораторная работа № ПРИЕМЫ СИНТЕЗА ДИНАМИЧЕСКИХ ОБРАЗОВ НА ПЛОСКОСТИ 1 Цель работы Практическое освоение типовых приемов синтеза динамических графических образов на примере создания программ управления движением набора простых графических объектов.

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

Приводимые ниже две программы создания эффектов мерцания позволяют понять некоторые из этих принципов.

Uses Сrt, Graph;

Var Gx,Gy, Gd,Gm, x,y, x1,y1,i :integer;

begin Gd:=detect; InitGraph(Gd,Gm,'c:\tp7\bgi');

Gx:=GetMaxX; Gy:=GetMaxY; randomize;

{------------------------------------------------------------------------------------ "Небо в алмазах" - генератор точек с гашением в их окрестности набора точек --------------------------------------------------------------------------------------} Repeat i:=random(7)+9; x:=random(Gx); y:=random(Gy);

Putpixel(x,y,i);

for i:=0 to random(900) do Putpixel(x-15+random(31),y-15+random(31),0) Until KeyPressed; ReadKey; Cleardevice;

{--------------------------------------------------------------------------------------- "Мерцание" - последовательно высвечиваются и гасятся две случайные точки, из-за инерционности зрения возникает эффект мерцающего набора точек -------------------------------------------------------------------------------------------------------} Repeat i:=random(7)+9; x1:=x; x:=random(Gx);

y1:=y; y:=random(Gy);

Putpixel(x,y,i);

delay(100); Putpixel(x1,y1,0) Until KeyPressed;

CloseGraph end.

3 Практическое задание 3.1 Модифицировать алгоритм "Небо в алмазах" 3.1.1 Выводить точки в определенную область экрана, например 3.1.2 Выводить точки с сортировкой по цвету в зависимости от ее положения на экране яркость 3.2 Модифицировать алгоритм "Мерцание" 3.2.1 Увеличить "заполненность" экрана, оперируя одновременно с несколькими точками 3.2.2 Организовать "мерцающую волну" с направлением по вариантам п. 3.1.4 Синтез динамических эффектов с анализом возможности выполнения процедур Одним из узловых моментов моделирования большинства динамических процессов является установка набора ограничительных условий на выполнение тех или иных элементов этих процессов. Причем эти условия обычно являются весьма точным отображением реальных физических ограничений. Рассмотрим это на примере моделирования некоторых физических процессов.

В раздел описаний предыдущих программ добавим const N=500; { число объектов } var X,Y, { массивы координат объектов } vX,vY { массивы скоростей объектов } P: { цвет объектов } array[1..N] of integer;

{-------------------------------------------------------------------------------------- "Молекулы газа в поле тяготения" - динамический процесс с анализом его допустимости.

---------------------------------------------------------------------------------------} for i:=1 to N do begin X[i]:=random(Gx); { начальные координаты "молекул"} Y[i]:=random(Gy) end;

REPEAT for i:=1 to N do begin PutPixel(X[i],Y[i],0); { стирание старого изображения } { Генерируем случайные составляющие скорости "молекул" } dX:=-20+random(41); { -20...20 - равновероятно влево и вправо } dY:=-10+random(41); { -10...30 - с тяготением вниз } { Если при выбранной скорости "молекула" не выйдет за границу, то проводится смена ее координат и перерисовка } if( X[i]+dX> 0) and( X[i]+dX< Gx) then inc(X[i],dX);



if( Y[i]+dY> 0) and( Y[i]+dY< Gy) then inc(Y[i],dY);

PutPixel(X[i],Y[i], 14) end until KeyPressed; ReadKey; ClearDevice;

5 Практическое задание по модификации алгоритма "Молекулы газа в поле тяготения" 5.1 Точки ярких цветов направить яркие к одной из границ экрана, прочие - к противоположной границе. темные 5.2 Смоделировать поведение молекул газа в цилиндре под движущимся поршнем.

5.3 Смоделировать процесс испарения смеси трех жидкостей с разной температурой кипения.

6 Анализ взаимодействия и свойств объектов Следующие фрагменты программы иллюстрируют принцип выполнения графических процедур с анализом области, где моделируется динамический процесс.

{-------------------------------------------------------------------------------------- "Снег" - перемещение малых объектов с анализом "пути следования" ---------------------------------------------------------------------------------------} for i:=1 to N do begin X[i]:=random(Gx); { начальное положение "снежинок"} Y[i]:=random(Gy); PutPixel(X[i],Y[i],15) end;

Rectangle(100,Gy-100, Gx-100,Gy); { преграда } REPEAT for i:=1 to N do begin if(Y[i]

X[i]:=random(Gx); PutPixel(X[i],Y[i],15) end end until KeyPressed; ReadKey; ClearDevice;

{---------------------------------------------------------------------------------------- "Взрыв" - перемещение малых объектов с остановкой при достижении границы -----------------------------------------------------------------------------------------} for i:=1 to N do begin X[i]:= 300 +i mod 25; { начальные координаты осколков } Y[i]:= 200 +i div 25; PutPixel(X[i],Y[i],15);

vX[i]:= -10+random(21); { составляющие скоростей осколков } vY[i]:= -10+random(21) end; ReadKey;

{ звук взрыва } for i:=1 to 300 do begin sound(random(i)); delay(1); nosound end;

REPEAT { процесс разлета осколков } for i:=1 to N do begin if( X[i]+vX[i]> 0) and( X[i]+vX[i]< Gx)and ( Y[i]+vY[i]> 0) and( Y[i]+vY[i]< Gy) then begin { если осколок еще не долетел до края } PutPixel(X[i],Y[i], 0); inc(X[i],vX[i]);

inc(Y[i],vY[i]);

PutPixel(X[i],Y[i],12) end { перерисовка в новом положении } else begin { пиксель долетел до края - обнуляем его скорость и генерируем звук при "ударе" о край } vX[i]:=0;

vY[i]:=0; sound(200); delay(2); nosound end end until KeyPressed END.

7 Практическое задание 7.1 Модифицировать алгоритм "Снег" 7.1.1 Смоделировать снег с ветром переменного направления.

7.1.2 Смоделировать образование "снежных хлопьев" при достижении движущимися пикселями нижней части экрана.

7.1.3 Смоделировать град, соскальзывающий на наклонных преградах.

7.2 Модифицировать алгоритм "Взрыв" 7.2.1 Смоделировать взрыв объекта со снижением скорости осколков в процессе их разлета.

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

7.2.3 Смоделировать две бомбы: осколки от взрыва первой подрывают вторую.

7.2.4 Смоделировать разлет осколков с учетом действия сопротивления воздуха и силы тяжести.

7.2.5 Смоделировать фейерверк (или салют) с ограничением "времени жизни" светящихся осколков.

Лабораторная работа № СИНТЕЗ СЛОЖНЫХ ДИНАМИЧЕСКИХ ОБРАЗОВ 1 Цель работы Практическое освоение приемов синтеза динамических графических образов моделированием характеристик физических процессов.

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

{-------------------------------------------------------------------------------------- "Волны" - динамический процесс с корректировками по граничным условиям ----------------------------------------------------------------------------------------} for i:=1 to N do begin X[i]:=random(Gx); { начальные координаты объектов } Y[i]:=random(40);

P[i]:=random(7)+9; { и их цвет } vX[i]:=-2+random(5);

vY[i]:=P[i]-6 end; { вертикальная скорость зависит от цвета } REPEAT for i:=1 to N do begin { при достижении границы меняем направление составляющей вектора скорости } if (X[i]+vX[i]<0) or (X[i]+vX[i]>Gx) then vX[i]:=-vX[i];

if (Y[i]+vY[i]<0) or (Y[i]+vY[i]>Gy) then vY[i]:=-vY[i];

PutPixel(X[i],Y[i], 0 ); { стирание старого изображения } inc(X[i],vX[i]);

inc(Y[i],vY[i]); { смена координат } PutPixel(X[i],Y[i],P[i]) end { вывод нового изображения } until KeyPressed; ReadKey; ClearDevice;

3 Практическое задание по модификации алгоритма "Волны" 3.1 Создать два перекрещивающихся набора волн по горизонтали и вертикали.

3.2 Организовать поочередную остановку волн на краях экрана в зависимости от их цвета.





3.3 Организовать исчезновение элементов волн при совпадении их координат.

4 Динамические эффекты с анализом состояния процесса {-------------------------------------------------------------------------------------- "Рой" -динамический процесс с постоянной корректировкой по условию.

---------------------------------------------------------------------------------------} for i:=1 to N do begin X[i]:=random(Gx); { начальные координаты объектов } Y[i]:=random(Gy) end;

xc:=1; yc:=Gy div 2; { координаты центра роя } vxc:=3; { и его скорость} REPEAT { Рой меняет направление движения при достижении края экрана } if( xc>Gx)or( xc<0) then vxc:=-vxc;

inc(xc,vxc); { смещение центра роя } for i:=1 to N do begin dx:=-25+random(51); { генерируем случайное изменение } dy:=-25+random(51); { координат объектов } PutPixel(X[i],Y[i], 0); { и стираем их старые положения } { Если смещение элемента роя в случайно сгенерированном направлении возможно, то оно корректируется по направлению к центру роя } if (X[i]+dx> 0 ) and( X[i]+dx< Gx) then begin if (X[i]+dx< xc) then inc(dx,5) else dec(dx,5); inc(X[i],dx) end;

if( Y[i]+dy> 0 ) and( Y[i]+dy< Gy) then begin if( Y[i]+dy< yc) then inc(dy,5) else dec(dy,5); inc(Y[i],dy) end;

PutPixel(X[i],Y[i], 14) { новое положение объекта } end until KeyPressed end.

5 Практическое задание по модификации алгоритма "Рой" 5.1 Смоделировать разноцветный рой с разными скоростями объектов в зависимости от из цвета.

5.2 Смоделировать два роя разного цвета, центры которых перемещаются с разными скоростями.

5.3 Смоделировать рой с изменяющимися размерами и активностью в процессе его существования.

5.4 Смоделировать движение кометы.

6 Синтез простых трехмерных динамических образов При синтезе трехмерных графических образов обычно объект или набор объектов задается набором пространственных координат своих узловых точек. Затем определяются координаты перспективной проекции этих точек на визуальную плоскость. Ниже приведен простейший алгоритм создания трехмерной динамической сцены, где не стоит задача удаления невидимых частей трехмерного образа ввиду предельной простоты самих объектов (рисунок 1).

Задается скорость по оси Z (speed) для набора пикселей. Если какойлибо пиксель выходит из зоны видимости, то для него генерируются новые координаты в дальней части зоны видимости, моделируя перемещение наблюдателя относительно бесконечного набора пикселей. Цвет пикселей по мере приближения ( уменьшения координаты Z ) становится более ярким.

{-------------------------------------------------------------------------------------- "Межзвездный полет" - перспективная проекция движущегося трехмерного образа.

---------------------------------------------------------------------------------------} uses crt,graph;

const N=100; { число звезд } view=200; { дистанция просмотра } speed=50; { скорость полета } var x,y,z,_x,_y,color: array[1..N] of integer;

i,gm,gd,gx,gy,xc,yc :integer;

speed begin randomize;

for i:=1 to N do begin { установка начальных координат звезд } x[i]:=-10*view +random(20*view);

y[i]:=-10*view +random(20*view);

z[i]:= view +random(20*view) end;

Z gd:=0; initgraph(gd,gm,'');

xc:=GetmaxX div 2; экран yc:=GetmaxY div 2; Y X view REPEAT Рисунок { Расчет перспективных проекций звезд и их вывод } for i:=1 to N do { если проекция звезды в пределах экрана } if( z[i]/(abs(x[i])+1) > view/xc) and( z[i]/(abs(y[i])+1) > view/yc) then begin { вычисление координат с учетом перспективы } _x[i]:=xc +round( x[i]*(view/z[i]));

_y[i]:=yc +round( y[i]*(view/z[i]));

putpixel(_x[i],_y[i],color[i]) end else { для вышедших из поля зрения звезд переназначаем координаты } z[i]:=view +random(20*view);

delay(50); { задержка видимости набора звезд } for i:=1 to N do begin dec( z[i], speed); { смена координат звезд } { цвет зависит от дальности } if z[i]<4*view then color[i]:=else if z[i]<9*view then color[i]:= else color[i]:= 9 end;

{ стирание по старым координатам } for i:=1 to N do putpixel(_x[i],_y[i],0);

until KeyPressed; CloseGraph END.

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

7.2 Смоделировать вращение вокруг одной из осей координат при движении.

7.3 Вместо пикселей в качестве объектов использовать какие-либо простые фигуры (например, окружности), задавая увеличение их размера по мере приближения.

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

{-------------------------------------------------------------------------------------- "Движение в лабиринте" ---------------------------------------------------------------------------------------} Uses Crt, Graph;

Var Gd,Gm, _x,_y, lx,ly, xc,yc, dx,dy, rx,ry, rx_old, ry_old, i,j: integer;

ix,iy: boolean;

begin Gd:=0; InitGraph(Gd,Gm,'c:\tp7\bgi');

Rectangle( 10,10, 600,350); { элементы лабиринта } Rectangle( 90,90, 300,190);

Rectangle( 400,90, 450,290);

Pages:     || 2 | 3 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.