Автор: Пользователь скрыл имя, 26 Декабря 2011 в 20:45, практическая работа
Программа является примером создания анимационных объектов. Анимация представляет собой совокупность множества кадров движеня человечка, каждый из которых чуть-чуть отличается от предыдущего.При быстром поочередном просмотре кадров это создает иллюзию движения. Для того, чтобы сделать анимацию плавной, необходимо описать движение соответствующими функциями. Допустимо считать, что руки и ноги человечка движутся по окружностям с соответствующими центрами. Тогда легко рассчитать их положение в любой момент вреени и соответственно разбить это движение на любое число кадров.
Министерство Образования и Науки Украины
Национальный
Технический Университет
“ Киевский
Политехнический Институт”
Межуниверситетский медико-инженерный факультет
Кафедра
лечебно-диагностических
Расчетно-графическая работа
по дисциплине: «Системное программирование и операционные системы»
на тему:
«Непрерывная
анимация»
Киев 2011
Описание
программы:
Программа является
примером создания анимационных объектов.
Анимация представляет собой совокупность
множества кадров движеня человечка, каждый
из которых чуть-чуть отличается от предыдущего.При
быстром поочередном просмотре кадров
это создает иллюзию движения. Для того,
чтобы сделать анимацию плавной, необходимо
описать движение соответствующими функциями.
Допустимо считать, что руки и ноги человечка
движутся по окружностям с соответствующими
центрами. Тогда легко рассчитать их положение
в любой момент вреени и соответственно
разбить это движение на любое число кадров.
Листинг
программы:
//----------------------------
#include <vcl.h>
#pragma hdrstop
#include "UMult2.h"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------
#define Pi 3.1415926535897932385
short int cadr = 0; // номер кадра
short int H=30; // длина ноги и руки
short int Xpos = 3 * H; // координата опорной ноги
short int Ypos = 120; // "земля"
short int Hmen = 30; // высота тела
short int Rhead = 10; // радиус головы
short int revers = 1; // направление движения
short int L = H * 1.41; // длина ноги
short int Ncadr=16; // число кадров на шаг
//----------------------------
void __fastcall TForm1::Draw()
{
float Angl = Pi/4*(1+(2.*cadr)/(Ncadr-1));
short int Yb = Ypos-H*sin(Angl);
short int Yt = Yb-Hmen;
short int X = Xpos-revers*H*cos(Angl);
Image1->Canvas->MoveTo(X-(
Image1->Canvas->LineTo(X,Yb);
if (cadr != Ncadr / 2-1)
Image1->Canvas->LineTo(Xpos,
Image1->Canvas->MoveTo(X,Yb);
Image1->Canvas->LineTo(X,Yt);
short int X1 = X - revers * (Yb-Ypos);
Image1->Canvas->MoveTo(X1,Yt+
Image1->Canvas->Ellipse(X1-
Image1->Canvas->LineTo(X,Yt+5)
if (cadr != Ncadr / 2-1)
{
Image1->Canvas->Ellipse(X1-
Image1->Canvas->LineTo(X1,Yt+
}
Image1->Canvas->Ellipse(X-
Image1->Canvas->Rectangle(X-
X+Rhead,Yt-2*Rhead-1); // шляпа
}
//----------------------------
void __fastcall TForm1::BRunClick(TObject *Sender)
{
Timer1->Enabled = ! Timer1->Enabled;
}
//----------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Draw();
cadr = (cadr+1) % Ncadr;
if (cadr == 0)
if ((Xpos < Image1->Picture->Width-revers*
(Xpos>-revers*3*H))
Xpos += revers*H*1.41;
else revers = -revers;
Draw();
}
//----------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//раскомментируйте следующий оператор для файла фона
// if (OpenPictureDialog1->Execute()
// Image1->Picture->LoadFromFile(
//раскомментируйте следующие операторы для фона - Rectangle
/* Image1->Canvas->Brush->Color = 0;
Image1->Canvas->Rectangle(90,
Image1->Canvas->Brush->Color = clWhite;
*/
Image1->Canvas->MoveTo(0,Ypos+
Image1->Canvas->Pen->Width = 4;
Image1->Canvas->LineTo(Image1-
Image1->Canvas->Pen->Width = 1;
Image1->Canvas->Pen->Mode = pmNotXor;
Timer1->Interval = 600 / Ncadr;
Draw();
}
//----------------------------
Скриншоты:
Выводы:
Описанный алгорит может быть использован при создании обучающих программ для "оживления" схем, изображений, механизмов, чтобы показать в движении взаимодействие их отдельных составляющих.