//программа написана на языке C++Builder 6
#include <vcl.h>
#pragma hdrstop
#define IC_M Image1->Canvas->MoveTo
#define IC_L Image1->Canvas->LineTo
#define IC_B_C Image1->Canvas->Brush->Color
#define IC_P_C Image1->Canvas->Pen->Color
#define IC_P_W Image1->Canvas->Pen->Width
#define IC_F Image1->Canvas->FloodFill
#define IC_E Image1->Canvas->Ellipse
#define IC_P Image1->Canvas->Pixels
#define cW clWhite
#define cG clGreen
#define cR clRed
#include «Article_13_1.h»
//—————————————————————————
#pragma package(smart_init)
#pragma resource «*.dfm»
TForm1 *Form1;
short num=0;short H=90; short revers=1;
short Xpos=7*H/3;short Ypos=540;
//—————————————————————————
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ }
//—————————————————————————
//рисует на поверхности формы клоуна
void __fastcall TForm1::Draw()
{Color=(TColor)cW;
switch(num)
{case 0:
//клоун
IC_P_C=(TColor)RGB(254,97,29);IC_B_C=(TColor)RGB(254,97,29);
IC_E(Xpos-2*H,Ypos-4*H,Xpos+2*H,Ypos);
//левый глаз
IC_P_C=(TColor)cW; IC_B_C=(TColor)cW;
IC_E(Xpos-H,Ypos-11*H/3,Xpos-H/6,Ypos-13*H/6);
//зрачок
IC_P_C=(TColor)0; IC_B_C=(TColor)0;
IC_E(Xpos-7*H/10,Ypos-3*H,Xpos-7*H/30,Ypos-7*H/3);
//блик
IC_P_C=(TColor)cW; IC_B_C=(TColor)cW;
IC_E(Xpos-H/2,Ypos-83*H/30,Xpos-2*H/5,Ypos-79*H/30);
//правый глаз
IC_P_C=(TColor)cW; IC_B_C=(TColor)cW;
IC_E(Xpos+H/6,Ypos-11*H/3,Xpos+H,Ypos-13*H/6);
//зрачок
IC_P_C=(TColor)0; IC_B_C=(TColor)0;
IC_E(Xpos+7*H/30,Ypos-3*H,Xpos+7*H/10,Ypos-7*H/3);
//блик
IC_P_C=(TColor)cW; IC_B_C=(TColor)cW;
IC_E(Xpos+2*H/5,Ypos-83*H/30,Xpos+H/2,Ypos-79*H/30);
//нос
IC_P_C=(TColor)cR; IC_B_C=(TColor)cR;
IC_E(Xpos-2*H/3,Ypos-7*H/3,Xpos+2*H/3,Ypos-H);
//рот, правая сторона
IC_P_C=(TColor)RGB(60,0,30); IC_B_C=(TColor)RGB(60,0,30);
Bezier(Xpos,Ypos-H/3,Xpos+H/3,Ypos-H/2,Xpos+H/6,Ypos-11*H/30);
Bezier(Xpos+H/3,Ypos-H/2,Xpos+5*H/6,Ypos-H,Xpos+17*H/30,Ypos-32*H/45);
Bezier(Xpos+5*H/6,Ypos-H,Xpos+7*H/6,Ypos-3*H/2,Xpos+16*H/15,Ypos-4*H/3);
Bezier(Xpos+7*H/6,Ypos-3*H/2,Xpos+H/3,Ypos-H,Xpos+23*H/30,Ypos-7*H/6);
Bezier(Xpos+H/3,Ypos-H,Xpos,Ypos-41*H/45,Xpos+H/6,Ypos-14*H/15);
//рот, левая сторона
Bezier(Xpos,Ypos-41*H/45,Xpos-H/3,Ypos-H,Xpos-H/6,Ypos-14*H/15);
Bezier(Xpos-H/3,Ypos-H,Xpos-7*H/6,Ypos-3*H/2,Xpos-23*H/30,Ypos-7*H/6);
Bezier(Xpos-7*H/6,Ypos-3*H/2,Xpos-5*H/6,Ypos-H,Xpos-16*H/15,Ypos-4*H/3);
Bezier(Xpos-5*H/6,Ypos-H,Xpos-H/3,Ypos-H/2,Xpos-17*H/30,Ypos-32*H/45);
Bezier(Xpos-H/3,Ypos-H/2,Xpos,Ypos-H/3,Xpos-H/6,Ypos-11*H/30);
IC_F(Xpos,Ypos-2*H/3,IC_P[Xpos][Ypos-2*H/3],fsSurface);
//цилиндр
//нижняя часть, правая сторона
IC_P_C=(TColor)RGB(19,11,34); IC_B_C=(TColor)RGB(19,11,34);
Bezier(Xpos,Ypos-58*H/15,Xpos+5*H/6,Ypos-37*H/10,Xpos+2*H/5,
Ypos-23*H/6);
Bezier(Xpos+5*H/6,Ypos-37*H/10,Xpos+H,Ypos-41*H/10,Xpos+31*H/30,
Ypos-39*H/10);
Bezier(Xpos+H,Ypos-41*H/10,Xpos,Ypos-131*H/30,Xpos+5*H/6,Ypos-43*H/10);
//нижняя часть, левая сторона
Bezier(Xpos,Ypos-131*H/30,Xpos-H,Ypos-41*H/10,Xpos-5*H/6,Ypos-43*H/10);
Bezier(Xpos-H,Ypos-41*H/10,Xpos-5*H/6,Ypos-37*H/10,Xpos-31*H/30,
Ypos-39*H/10);
Bezier(Xpos-5*H/6,Ypos-37*H/10,Xpos,Ypos-58*H/15,Xpos-2*H/5,Ypos-23*H/6);
IC_F(Xpos,Ypos-25*H/6,IC_P[Xpos][Ypos-25*H/6],fsSurface);
IC_F(Xpos,Ypos-119*H/30,IC_P[Xpos][Ypos-119*H/30],fsSurface);
//верхняя часть, правая сторона
Bezier(Xpos,Ypos-139*H/30,Xpos+2*H/3,Ypos-68*H/15,Xpos+H/3,Ypos-23*H/5);
Bezier(Xpos+2*H/3,Ypos-68*H/15,Xpos+11*H/15,Ypos-76*H/15,
Xpos+2*H/3,Ypos-29*H/6);
Bezier(Xpos+11*H/15,Ypos-76*H/15,Xpos+5*H/6,Ypos-16*H/3,
Xpos+4*H/5,Ypos-26*H/5);
Bezier(Xpos+5*H/6,Ypos-16*H/3,Xpos,Ypos-35*H/6,Xpos+H/2,Ypos-17*H/3);
//верхняя часть,левая сторона
Bezier(Xpos,Ypos-35*H/6,Xpos-5*H/6,Ypos-16*H/3,Xpos-H/2,Ypos-17*H/3);
Bezier(Xpos-5*H/6,Ypos-16*H/3,Xpos-11*H/15,Ypos-76*H/15,Xpos-4*H/5,
Ypos-26*H/5);
Bezier(Xpos-11*H/15,Ypos-76*H/15,Xpos-2*H/3,Ypos-68*H/15,Xpos-2*H/3,Ypos-29*H/6);
Bezier(Xpos-2*H/3,Ypos-68*H/15,Xpos,Ypos-139*H/30,Xpos-H/3,Ypos-23*H/5);
IC_F(Xpos,Ypos-5*H,IC_P[Xpos][Ypos-5*H],fsSurface);
IC_P_C=(TColor)RGB(84,37,84);
IC_B_C=(TColor)RGB(84,37,84);
//лента,правая сторона
Bezier(Xpos,Ypos-131*H/30,Xpos+7*H/10,Ypos-127*H/30,Xpos+H/3,
Ypos-13*H/3);
Bezier(Xpos+7*H/10,Ypos-127*H/30,Xpos+2*H/3,Ypos-68*H/15,
Xpos+2*H/3,Ypos-22*H/5);
Bezier(Xpos+2*H/3,Ypos-68*H/15,Xpos,Ypos-139*H/30,Xpos+H/3,Ypos-23*H/5);
//лента, левая сторона
Bezier(Xpos,Ypos-139*H/30,Xpos-2*H/3,Ypos-68*H/15,Xpos-H/3,Ypos-23*H/5);
Bezier(Xpos-2*H/3,Ypos-68*H/15,Xpos-7*H/10,Ypos-127*H/30,
Xpos-2*H/3,Ypos-22*H/5);
Bezier(Xpos-7*H/10,Ypos-127*H/30,Xpos,Ypos-131*H/30,Xpos-H/3,
Ypos-13*H/3);
IC_F(Xpos,Ypos-22*H/5,IC_P[Xpos][Ypos-22*H/5],fsSurface);
break;
case 1:
IC_P_C=(TColor)RGB(254,97,29);
IC_B_C=(TColor)RGB(254,97,29);
IC_E(Xpos-2*H,Ypos-4*H,Xpos+2*H,Ypos);
//левый глаз
IC_P_C=(TColor)cW; IC_B_C=(TColor)cW;
IC_E(Xpos-H,Ypos-11*H/3,Xpos-H/6,Ypos-13*H/6);
//зрачок
IC_P_C=(TColor)0; IC_B_C=(TColor)0;
IC_E(Xpos-7*H/10,Ypos-3*H,Xpos-7*H/30,Ypos-7*H/3);
//блик
IC_P_C=(TColor)cW; IC_B_C=(TColor)cW;
IC_E(Xpos-H/2,Ypos-83*H/30,Xpos-2*H/5,Ypos-79*H/30);
//правый глаз
IC_P_C=(TColor)cW; IC_B_C=(TColor)cW;
IC_E(Xpos+H/6,Ypos-11*H/3,Xpos+H,Ypos-13*H/6);
//зрачок
IC_P_C=(TColor)0; IC_B_C=(TColor)0;
IC_E(Xpos+7*H/30,Ypos-3*H,Xpos+7*H/10,Ypos-7*H/3);
//блик
IC_P_C=(TColor)cW ; IC_B_C=(TColor)cW;
IC_E(Xpos+2*H/5,Ypos-83*H/30,Xpos+H/2,Ypos-79*H/30);
//нос
IC_P_C=(TColor)cR; IC_B_C=(TColor)cR;
IC_E(Xpos-2*H/3,Ypos-7*H/3,Xpos+2*H/3,Ypos-H);
//рот, правая сторона
IC_P_C=(TColor)RGB(60,0,30);IC_B_C=(TColor)RGB(60,0,30);
Bezier(Xpos,Ypos-H/3,Xpos+H/3,Ypos-H/2,Xpos+H/6,Ypos-11*H/30);
Bezier(Xpos+H/3,Ypos-H/2,Xpos+5*H/6,Ypos-H,Xpos+17*H/30,Ypos-32*H/45);
Bezier(Xpos+5*H/6,Ypos-H,Xpos+7*H/6,Ypos-3*H/2,Xpos+16*H/15,Ypos-4*H/3);
Bezier(Xpos+7*H/6,Ypos-3*H/2,Xpos+H/3,Ypos-H,Xpos+23*H/30,Ypos-7*H/6);
Bezier(Xpos+H/3,Ypos-H,Xpos,Ypos-41*H/45,Xpos+H/6,Ypos-14*H/15);
//рот, левая сторона
Bezier(Xpos,Ypos-41*H/45,Xpos-H/3,Ypos-H,Xpos-H/6,Ypos-14*H/15);
Bezier(Xpos-H/3,Ypos-H,Xpos-7*H/6,Ypos-3*H/2,Xpos-23*H/30,Ypos-7*H/6);
Bezier(Xpos-7*H/6,Ypos-3*H/2,Xpos-5*H/6,Ypos-H,Xpos-16*H/15,Ypos-4*H/3);
Bezier(Xpos-5*H/6,Ypos-H,Xpos-H/3,Ypos-H/2,Xpos-17*H/30,Ypos-32*H/45);
Bezier(Xpos-H/3,Ypos-H/2,Xpos,Ypos-H/3,Xpos-H/6,Ypos-11*H/30);
IC_F(Xpos,Ypos-2*H/3,IC_P[Xpos][Ypos-2*H/3],fsSurface);
//шляпа
//нижняя часть, правая сторона
IC_P_C=(TColor)RGB(2,20,104);IC_B_C=(TColor)RGB(2,20,104);
Bezier(Xpos,Ypos-39*H/10,Xpos+H/2,Ypos-58*H/15,Xpos+7*H/30,
Ypos-39*H/10);
Bezier(Xpos+H/2,Ypos-58*H/15,Xpos+5*H/6,Ypos-23*H/6,Xpos+2*H/3,
Ypos-58*H/15);
Bezier(Xpos+5*H/6,Ypos-23*H/6,Xpos+16*H/15,Ypos-41*H/10,
Xpos+14*H/15,Ypos-39*H/10);
Bezier(Xpos+16*H/15,Ypos-41*H/10,Xpos+17*H/15,Ypos-13*H/3,
Xpos+11*H/10,Ypos-61*H/15);
Bezier(Xpos+17*H/15,Ypos-13*H/3,Xpos+H,Ypos-67*H/15,Xpos+16*H/15,
Ypos-22*H/5);
Bezier(Xpos+H,Ypos-67*H/15,Xpos+2*H/3,Ypos-64*H/15,Xpos+5*H/6,
Ypos-13*H/3);
Bezier(Xpos+2*H/3,Ypos-64*H/15,Xpos,Ypos-25*H/6,Xpos+H/3,Ypos-21*H/5);
//нижняя часть, левая сторона
Bezier(Xpos,Ypos-25*H/6,Xpos-2*H/3,Ypos-64*H/15,Xpos-H/3,Ypos-21*H/5);
Bezier(Xpos-2*H/3,Ypos-64*H/15,Xpos-H,Ypos-67*H/15,Xpos-5*H/6,
Ypos-13*H/3);
Bezier(Xpos-H,Ypos-67*H/15,Xpos-17*H/15,Ypos-13*H/3,Xpos-16*H/15,
Ypos-22*H/5);
Bezier(Xpos-17*H/15,Ypos-13*H/3,Xpos-16*H/15,Ypos-41*H/10,
Xpos-11*H/10,Ypos-61*H/15);
Bezier(Xpos-16*H/15,Ypos-41*H/10,Xpos-5*H/6,Ypos-23*H/6,
Xpos-14*H/15,Ypos-39*H/10);
Bezier(Xpos-5*H/6,Ypos-23*H/6,Xpos-H/2,Ypos-58*H/15,Xpos-2*H/3,
Ypos-58*H/15);
Bezier(Xpos-H/2,Ypos-58*H/15,Xpos,Ypos-39*H/10,Xpos-7*H/30,Ypos-39*H/10);
IC_F(Xpos,Ypos-41*H/10,IC_P[Xpos][Ypos-41*H/10],fsSurface);
IC_F(Xpos,Ypos-59*H/15,IC_P[Xpos][Ypos-59*H/15],fsSurface);
//верх шляпы, правая часть
Bezier(Xpos,Ypos-133*H/30,Xpos+3*H/5,Ypos-137*H/30,Xpos+H/3,
Ypos-67*H/15);
Bezier(Xpos+3*H/5,Ypos-137*H/30,Xpos+3*H/5,Ypos-5*H,Xpos+3*H/5,
Ypos-143*H/30);
Bezier(Xpos+3*H/5,Ypos-5*H,Xpos+H/2,Ypos-77*H/15,Xpos+17*H/30,
Ypos-76*H/15);
Bezier(Xpos+H/2,Ypos-77*H/15,Xpos,Ypos-5*H,Xpos+7*H/30,Ypos-151*H/30);
//верх шляпы, левая часть
Bezier(Xpos,Ypos-5*H,Xpos-H/2,Ypos-77*H/15,Xpos-7*H/30,Ypos-151*H/30);
Bezier(Xpos-H/2,Ypos-77*H/15,Xpos-3*H/5,Ypos-5*H,Xpos-17*H/30,
Ypos-76*H/15);
Bezier(Xpos-3*H/5,Ypos-5*H,Xpos-3*H/5,Ypos-137*H/30,Xpos-3*H/5,
Ypos-143*H/30);
Bezier(Xpos-3*H/5,Ypos-137*H/30,Xpos,Ypos-133*H/30,Xpos-H/3,
Ypos-67*H/15);
IC_F(Xpos,Ypos-14*H/3,IC_P[Xpos][Ypos-14*H/3],fsSurface);
//лента, правая сторона
IC_P_C=(TColor)RGB(100,45,100);IC_B_C=(TColor)RGB(100,45,100);
Bezier(Xpos,Ypos-25*H/6,Xpos+3*H/5,Ypos-127*H/30,Xpos+H/3,Ypos-21*H/5);
Bezier(Xpos+3*H/5,Ypos-127*H/30,Xpos+3*H/5,Ypos-137*H/30,
Xpos+3*H/5,Ypos-22*H/5);
Bezier(Xpos+3*H/5,Ypos-137*H/30,Xpos,Ypos-133*H/30,Xpos+H/3,
Ypos-67*H/15);
//лента, левая сторона
Bezier(Xpos,Ypos-133*H/30,Xpos-3*H/5,Ypos-137*H/30,Xpos-H/3,
Ypos-67*H/15);
Bezier(Xpos-3*H/5,Ypos-137*H/30,Xpos-3*H/5,Ypos-127*H/30,Xpos-3*H/5,
Ypos-22*H/5);
Bezier(Xpos-3*H/5,Ypos-127*H/30,Xpos,Ypos-25*H/6,Xpos-H/3,Ypos-21*H/5);
IC_F(Xpos,Ypos-13*H/3,IC_P[Xpos][Ypos-13*H/3],fsSurface);}}
//————————————————————————
//рисует кривые линии
void __fastcall TForm1::Bezier(short StartX, short StartY, short EndX,
short EndY, short CenterX, short CenterY)
{ TPoint points[4];
points[0]=Point(StartX,StartY);
points[1]=Point(CenterX,CenterY);
points[2]=Point(EndX,EndY);
points[3]=Point(EndX,EndY);
Image1->Canvas->PolyBezier(points,3);}
//———————————————————————-
//обработка события OnTimer
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{Clear();Draw();
if ((Xpos>=Image1->Picture->Width-H) || (Xpos<=H))
revers=-revers;
Xpos+=revers*H;
num=1-num;
Clear();Draw();}
//—————————————————————————
//обработка события OnCreate для формы
void __fastcall TForm1::FormCreate(TObject *Sender)
{DoubleBuffered=true;
TRect aRect;
//закрашивание верхней части окна
aRect=Rect(0,0,Image1->Width,Ypos);
IC_B_C=(TColor)RGB(220,242,248);
Image1->Canvas->FillRect(aRect);
//закрашивание нижней части окна
aRect=Rect(0,Ypos,Image1->Width,Ypos+100);
IC_B_C=(TColor)cG;
Image1->Canvas->FillRect(aRect);
Draw();}
//—————————————————————————
//Запуск, останов
void __fastcall TForm1::BRunClick(TObject *Sender)
{Timer1->Enabled=!Timer1->Enabled;}
//—————————————————————————
//закрытие формы
void __fastcall TForm1::BCloseClick(TObject *Sender)
{Close();}
//—————————————————————————
//очистка экрана
void __fastcall TForm1::Clear()
{
IC_B_C=(TColor)RGB(220,242,248);
TRect rct=Rect(0,0,Image1->Width,Ypos);
Image1->Canvas->FillRect(rct);
}
//—————————————————————————
Список литературы:
- Архангельский А.Я. , Тагин М.А.
Программирование в C++Builder 6 и 2006.-М.: ООО «Бином-Пресс», 2007г.-1184с.: ил.[schema type=»book» name=»СОЗДАНИЕ ПРОСТОЙ МУЛЬТИПЛИКАЦИИ» description=»В данной статье рассматривается создание собственной мультипликации — условного изображения клоуна. Пример простой мультипликации приводится в [1]. Простые анимации можно использовать при создании какой–нибудь обучающей программы, чтобы описывать какие-то схемы или условные изображения механизмов, чтобы показать в движении взаимодействие их отдельных составляющих.» author=»Ананьева Марина Алексеевна» publisher=»Басаранович Екатерина» pubdate=»2016-12-18″ edition=»euroasia-science_28.04.2016_4(25)» ebook=»yes» ]