
- •Часть 1
- •Содержание
- •1 Цель работы
- •2 Зрительное восприятие быстрой смены образов
- •3 Практическое задание
- •4 Синтез динамических эффектов с анализом возможности
- •5 Практическое задание по модификации алгоритма
- •6 Анализ взаимодействия и свойств объектов
- •7 Практическое задание
- •1 Цель работы
- •2 Динамические эффекты с корректировками по условиям
- •3 Практическое задание по модификации алгоритма "Волны"
- •4 Динамические эффекты с анализом состояния процесса
- •6 Синтез простых трехмерных динамических образов
- •7 Практическое задание по модификации алгоритма
- •8 Моделирование динамического процесса с анализом
- •9 Практическое задание
- •1 Цель работы
- •2 Процедуры перемещения и масштабирования фигур
- •3 Практическое задание по отображению сложного движения
- •4 Отслеживание положения и ориентации объекта
- •5 Практическое задание по моделированию движения
- •6 Модификация контурного изображения
- •7 Практическое задание
- •8 Мультипликация с чередованием видеостраниц
- •9 Практическое задание
- •1 Цель работы
- •2 Мультипликация чередованием набора образов
- •3 Практическое задание
- •4 Работа с набором взаимодействующих образов
- •3 Практическое задание
- •Часть 1
6 Модификация контурного изображения
В производстве мультфильмов широко используется следующий метод анимации:
а) задается массив координат узловых точек исходного контурного изображения ( X1[1..N],Y1[1..N] );
б) задается массив координат узловых точек целевого контурного изображения ( X2[1..N],Y2[1..N] ).Количество точек одинаково для обоих массивов;
в) плавной модификацией исходного образа получаем целевое изображение. Для этого последовательно находятся наборы координат X[1..N],Y[1..N]промежуточных образов ( рисунок 11). Каждую i-точку промежуточного образа выбирают на отрезке прямой между соответствующими точками исходного и целевого контуров, т. е. между точкойX1[i],Y1[i]и точкойX2[i],Y2[i]. Таким образом отрезок делится на m частей - по количеству промежуточных образов, включая целевой. Промежуточные образы перерисовывают, постепенно удаляясь от исходного образа.
X1[i] X[i] X2[i]
Y1[i] Y[i] Y2[i]
Рисунок 11
В случае равномерного деления отрезков координаты узловых точек промежуточных образов можно рассчитать по формулам
x[i]:= x1[i] +(x2[i] -x1[i])*k/m;
y[i]:= y1[i] +(y2[i] -y1[i])*k/m;
где k- номер промежуточного образа,m- количество делений.
Перерисовку образов удобно делать двойным рисованием в режиме SetWriteMode(1), или используя процедуры работы с видеопамятью в режиме XorPut. Задержка видимости образа определяет скорость преобразования. В приведенной ниже демонстрационной программе задается исходный контур из 12 точек X1[i],Y1[i] - координаты узлов на квадрате, а целевой контур из 12 точекX2[i],Y2[i]- координаты вершин звезды ( рисунок 12).
uses Graph,Crt;
var Gd,Gm, i,j ,k,n, xc,yc, r,m: integer;
x,y, x1,y1, x2,y2: array[1..12] of integer; alfa: real;
begin
Gd:=0; InitGraph(Gd, Gm, 'c:\tp7\bgi');
SetWriteMode(1);
{ координаты квадрата, преобразующегося в звезду }
for i:=7 to 10 do begin
x1[i]:= 10; y1[ i]:= 10+(i-7)*40 end;
for i:=1 to 4 do begin
x1[i]:=130; y1[i]:=130-(i-1)*40 end;
x1[11]:=50; x1[12]:= 90; y1[11]:=130; y1[12]:=130;
x1[ 6]:=50; x1[ 5]:= 90; y1[ 5]:= 10; y1[ 6]:= 10;
{ координаты звезды - целевой фигуры.
for i:=1 to 12 do begin
alfa:=(1-i)*pi/6;
if i mod 2 =0 then r:= 30
else r:=100;
x2[i]:=xc+round(r*cos(alfa));
y2[i]:=yc+round(r*sin(alfa)) end;
m:=50; { количество промежуточных образов}
for k:=1 to m do begin
for i:=1 to 12 do begin
{ координаты промежуточных образов }
x[i]:=x1[i]+round((x2[i]-x1[i])*k/m);
y[i]:=y1[i]+round((y2[i]-y1[i])*k/m) end;
{ перерисовка по промежуточным точкам }
for j:=1 to 2 do begin
Moveto( x[12],y[12]); Рисунок 12
for n:=1 to 12 do LineTo( x[ n],y[ n]);
if(k=1)and(j=1) then readkey; { задержка до начала движения }
if j=1 then delay(100) { время видимости очередного образа }
end end;
readkey; CloseGraph end.
Координаты точек промежуточных образов можно определять не только равномерным разбиением прямых линий между исходным и целевым изображениями, но и соединяя точки исходного и целевого контуров по кривым линиям с неравномерной разбивкой.