Моделирование графических образов средствами движущихся графических объектов



Муниципальное общеобразовательное учреждениегимназия № 56

Моделирование графических образов средствами движущихся графических объектов

Выполнил: Шулепов Владимир 11 а класс

Руководитель Колесниченко Е.В.

Г. Ижевск

Оглавление

Цель работы4

Задачи4

Машинные координаты5

Результаты работы:6

Программа «Снеговик»6

Алгоритм построения6

Программный код7

Программа «Ночной город»10

Алгоритм построения10

Программный код11

Программа «Человек»14

Алгоритм построения14

Программный код15

Список литературы16

Приложение16

Моделирование графических образов средствами движущихся графических объектов

Шулепов Владимир 11 класс, МАОУ «Гимназия № 56»

Руководитель Колесниченко Елена Владимировна, учитель информатики

Цель работы

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

Задачи

Изучение графических процедур и функций языка Турбо Паскаль;

Исследование различных методов построения графических движущихся объектов;

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

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

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

При прорисовке различных составляющих модели важно корректно и полно определить набор свойств составляющих модель объекта.

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

Машинные координаты

Начало машинной системы координат, направление осей, а также максимальные значения координат монитора показаны на рисунке

На рисунке приведена также машинная (xm, ym) и физическая (x,y) системы координат. Для изображения на экране точки с физическими координатами (x,y) необходимо определить ее машинные координаты (xm, ym).

xm=x0+x*Mx ,

ym=y0-y*My,

где Mx, My-масштабы соответственно по осям x и y, которые показывают число пикселей в одной физической единице,

x, y- физические координаты точки,

xm, ym— машинные координаты точки,

x0, y0— машинные координаты начала физической системы координат.

Результаты работы:

Программа «Снеговик»

Алгоритм построения

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

Движение моего снеговика заключается в том, что координаты частей просто смещаются вправо, в связи с чем, рисуется снеговик еще раз, смещенный вбок на какое-то число, а слева – столько же закрашивается. Некоторые рисуют движение: закрашивают исходную фигуру и рисуют смещенную, а я, например, у тела снеговика, — перерисовал смещенного снеговика, а потом слева зарисовал полуокружностью. Такой метод сложен тем, когда объект движется не по однородному фону, нужно закрашивать частями, как я делал с правой рукой снеговика, часть которой на белом фоне, а часть – на голубом. Ведро – просто из двух дуг, соединенных линиями.

Программный код

Uses Graph, crt;

Var

x,y,z,r,a,b,n,l,i,j: longint;

D,M : integer;

ch:char;

Begin

d:=detect;

InitGraph (d, m, »);

SetColor(177); {небо}

line(0,250,GetMaxX,300);

SetFillStyle(1,177);

FloodFill(0,0,177);

SetFillStyle(1,100); {земля}

FloodFill(60,500,177);

SetColor(68);

ellipse(GetMaxX-100,100,90,270,70,70); {луна}

ellipse(GetMaxX-100,100,90,270,50,70);

SetFillStyle(1,68);

FloodFill(GetMaxX-160,100,68);

putpixel(100,50,68); {звезды}

putpixel(300,15,68);

putpixel(450,50,68);

putpixel(650,90,68);

putpixel(680,190,68);

putpixel(830,200,68);

putpixel(860,100,68);

putpixel(297,12,68);

putpixel(350,200,68);

putpixel(1201,251,68);

putpixel(1200,250,68);

putpixel(1201,250,68);

putpixel(1200,251,68);

setcolor(6); {ель}

setfillstyle(1,6);

Bar(1050,800,1150,850);

r:=400;

SetColor(10);

SetFillStyle(1,red);

while r>=0 do

begin

LIne(1100,300+r,1250,400+r);

LIne(1100,300+r,950,400+r);

LIne(1250,400+r,950,400+r);

setfillstyle(1,10);

floodFill(1100,310+r,10);

r:=r-100;

end;

a:=400;

x:=500;

b:=100;

y:=x div 6;

z:=x div 3;

n:=x div 2;

SetColor(White);

Circle (b,(y div 2)+a,y div 2); {Снеговик}

Circle (b,y+(z div 2)+a,z div 2);

Circle (b,x-(n div 2)+a,n div 2);

SetFillStyle (1, white);

FloodFill (b,(y div 2)+a,white); {Заливка снеговика}

FloodFill (b,y+( z div 2)+a,white);

FloodFill (b,x-(n div 2)+a,white);

SetColor(Black);

PieSlice(b,(y div 2)+a-10,0,360,5); {Глаза}

PieSlice(b+20,(y div 2)+a-10,0,360,5);

ellipse(b+10,(y div 2)+a+10,210,330,15,5); {рот}

line(b+82,y+(z div 2)+a+20,b+100,y+(z div 2)+a+100); {руки}

line(b-53,y+(z div 2)+a,b-70,y+(z div 2)+a+100);

setcolor(42);

PieSlice(b+20,(y div 2)+a,150,210,10); {нос}

SetColor(Black);

SetFillStyle (1, black);

SetFillStyle (1, white);

While b<=800 do {Движение снеговика}

begin

SetColor(White);

Circle (b,(y div 2)+a,y div 2);

Circle (b,y+(z div 2)+a,z div 2);

Circle (b,x-(n div 2)+a,n div 2);

setcolor(42);

PieSlice(b+20,(y div 2)+a,150,210,10);

SetColor(Black);

PieSlice(b,(y div 2)+a-10,0,360,5);

PieSlice(b+20,(y div 2)+a-10,0,360,5);

ellipse(b+10,(y div 2)+a+10,210,330,15,5);

line(b+82,y+(z div 2)+a+20,b+100,y+(z div 2)+a+100);

line(b-53,y+(z div 2)+a,b-70,y+(z div 2)+a+100);

setColor(100);

line(b+80,y+(z div 2)+a+25,b+100,y+(z div 2)+a+100);

line(b-64,y+(z div 2)+a+51,b-71,y+(z div 2)+a+101);

ellipse (b-1,(y div 2)+a,90,270,y div 2,y div 2);

ellipse (b-1,y+(z div 2)+a,90,270,z div 2,z div 2);

ellipse (b-1,x-(n div 2)+a,90,270,n div 2,n div 2);

SetColor(White);

ellipse (b-1,(y div 2)+a-10,90,270,5,5);

ellipse (b+19,(y div 2)+a-10,90,270,5,5);

ellipse (b+9,(y div 2)+a+11,180,270,15,5);

ellipse (b+9,(y div 2)+a+9,270,330,15,5);

ellipse (b+19,(y div 2)+a,150,210,10,10);

line (b-56,y+(z div 2)+a,b-63,y+(z div 2)+a+50);

b:=b+1;

end;

setColor(30);

setfillstyle(1,28);

line (b-35,(y div 2)+a-25,b-20,(y div 2)+a-80); {ведро}

line (b+35,(y div 2)+a-25,b+20,(y div 2)+a-80);

fillellipse(b,(y div 2)+a-80,20,3);

ellipse(b,(y div 2)+a-25,180,360,35,7);

floodfill(b-1,(y div 2)+a-25,30);

ellipse(b+7,(y div 2)+a,160,323,25,50);

readln;

closeGraph;

end.

Программа «Ночной город»

Алгоритм построения

Для начала, так же, рисуем фон, то есть – линию горизонта и заливаем небо, после – закрашенные прямоугольники в цикле. Сначала я просто рисовал автомобили, а потом создавал их движение. В данном случае я рисовал их с использованием режима «Xor», что позволяет на много проще создавать движущиеся объекты на разноцветном фоне. Данный режим заключается в том, что если нарисовать линию любого цвета, а потом еще раз на том же месте, то изображение на заднем плане будет таким же, каким и было до линии. Автомобили я рисовал просто, сначала на листочке нарисовал, а потом примерно поставил координаты, после чего подгонял на компьютере. Потом нарисовал второй автомобиль, отразив его. Просто каждую координату менял по «x», вычитая из длины автомобиля координату. Допустим координата была (100;40), а длина автомобиля равна 250, то получаем координату (250-100;40) = (150;40).

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

Программный код

Uses Graph, crt;

Var

x,y,k,e,q,n,w,r,a,b: longint;

D,M : integer;

ch:char;

Begin

d:=detect;

InitGraph (d, m, »);

SetWriteMode(1);{Включение режима Xor}

SetColor(177);

line(0,500,GetMaxX,450);{небо}

setFillStyle(1,177);

Floodfill(0,0,177);

q:=0;

k:=80;

n:=300;

while q<=5 do{здания}

begin

setFillStyle(1,random(6)+4);



Bar (k,n,k+180,n+500);

if q mod 2=0 then begin k:=k+200; n:=200; end

else begin k:=k+200; n:=300; end;

q:=q+1;

end;

Randomize;

Setfillstyle(1,yellow);

q:=0;

k:=80;

n:=300;

e:=10;



Страницы: Первая | 1 | 2 | 3 | Вперед → | Последняя | Весь текст




sitemap
sitemap