ТЕХНИЧЕСКИЕ НАУКИ
ИСПОЛЬЗОВАНИЕ ГРАФИЧЕСКИХ ПРИМИТИВОВ ПРИ
ПОСТРОЕНИИ ИЗОБРАЖЕНИЯ
Ананьева Марина Алексеевна
старший преподаватель кафедры прикладной математики Московский Государственный Университет информационных технологий, радиотехники и электроники МИРЭА
г. Москва
USE OF GRAPHICAL OUTPUT PRIMITIVES BY IMAGE ACQUISITION
Ananieva Marina Alekseevna, older teacher of chair application mathematics of Moskow State University information technology, radio-technology and electronics MIREA, MOSCOW АННОТАЦИЯ
В этой статье рассматривается построение графического изображения (часы) с использованием графических примитивов (линий, окружностей, полигонов). Для построения кривых линий применяются кривые Безье[1]. При построении изображений для построения кривых линий рекомендуется использовать кривые Безье.
ABSTRACT
In this article considers image acquisition (clock) with use of graphical output primitives (lines, circles, polygons). For acquisition of curve lines use Besier curves [1]. By image acquisition for acquisition curve lines recommend use Besier curves.
Ключевые слова: графические примитивы, кривые Безье. Keywords: graphical output primitives, Besier curves.
//программа написана на языке программирования C++Builder6
#include <vcl.h>
#pragma hdrstop
#define C_M Canvas->MoveTo
#define C_L Canvas->LineTo
#define C_BC Canvas->Brush->Color
#define C_PC Canvas->Pen->Color
#define C_P_W Canvas->Pen->Width
#define C_F Canvas->FloodFill
#define C_E Canvas->Ellipse
#define C_R Canvas->Rectangle
#define R_B RGB(200,200,200)
#define C_P Canvas->Polygon
#define C_C Canvas->Chord
#define cW clWhite
#define cR clRed
#define cG clGreen
#define cY clYellow
#define cL clLime
#include «Primer_30.h»
//......................................................................
#pragma package(smart_init) #pragma resource «*.dfm» TForm1 *Form1; int mx=30,my=30;
//.....................................
_fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ }
//-...............................................................
void_fastcall TForm1::FormPaint(TObject *Sender)
{ int x,y;
Color=(TColor)cW;
ShowGrid( );
C_PC=(TColor)0;
TPoint p1[4],p2[5],p3[4],p4[5];
//рисунок
C_PC=(TColor)cG;C_BC=(TColor)cG;
C_E(1.7*mx,3.7*my,12.3*mx,14.3*my);
C_PC=(TColor)RGB(255,138,176);
C_BC=(TColor)RGB(255,138,176);
C_E(1.9*mx,3.9*my,12.1*mx,14.1*my);
C_PC=(TColor)cY;C_BC=(TColor)cY;
C_E(3.5*mx,5.5*my,10.5*mx,12.5*my);
C_PC=(TColor)cL;C_BC=(TColor)cL;
C_E(4.5*mx,11.1*my,9.5*mx,12.7*my);
//гномик
//голова, правая часть
C_PC=(TColor)RGB(252,71,3);
C_BC=(TColor)RGB(252,71,3);
Bezier(7*mx,8.1*my,7.8*mx,7.7*my,7.5*mx,7.8*my);
Bezier(7.8*mx,7.7*my,8.5*mx,7.3*my,8*mx,7.6*my);
Bezier(8.5*mx,7.3*my,8.5*mx,6.5*my,8.7*mx,7*my); Bezier(8.5*mx,6.5*my,7.8*mx,5.6*my,8.2*mx,6.4*my); Bezier(7.8*mx,5.6*my,7*mx,5.4*my,7.5*mx,5.5*my); //голова, левая часть
Bezier(7*mx,5.4*my,6.2*mx,5.6*my,6.5*mx,5.5*my);
Bezier(6.2*mx,5.6*my,5.5*mx,6.5*my,5.8*mx,6*my);
Bezier(5.5*mx,6.5*my,5.5*mx,7.3*my,5.3*mx,7*my);
Bezier(5.5*mx,7.3*my,6.2*mx,7.7*my,6*mx,7.6*my);
Bezier(6.2*mx,7.7*my,7*mx,8.1*my,6.5*mx,7.8*my);
C_F(7*mx,7*my,(TColor)RGB(252,71,3),fsBorder);
//оправа очков
C_PC=(TColor)cW;C_BC=(TColor)cW;
C_E(5.9*mx,6*my,6.9*mx,7*my);
C_E(7.1*mx,6*my,8.1*mx,7*my);
//ремешок
C_P_W=3;
C_M(6.9*mx,6.5*my);C_L(7.1*mx,6.5*my);
Bezier(5.9*mx,6.5*my,5.6*mx,6.4*my,5.8*mx,6.4*my);
Bezier(7.2*mx,6.5*my,8.4*mx,6.4*my,8.2*mx,6.4*my);
C_P_W=1;
//очки
C_PC=(TColor)RGB(112,146,190); C_BC=(TColor)RGB(112,146,190); C_E(6.0*mx,6.1*my,6.8*mx,6.9*my); C_E(7.2*mx,6.1*my,8.0*mx,6.9*my); //нос
C_PC=(TColor)RGB(255,138,176); C_BC=(TColor)RGB(255,138,176); Bezier(7*mx,7.3*my,6.7*mx,7.2*my,6.9*mx,7.4*my); Bezier(6.7*mx,7.2*my,7*mx,7.5*my,6.8*mx,7.4*my); Bezier(7*mx,7.5*my,7.3*mx,7.2*my,7.2*mx,7.4*my); Bezier(7.3*mx,7.2*my,7*mx,7.3*my,7.1*mx,7.4*my); C_F(7*mx,7.4*my,(TColor) RGB(255,138,176),fsBorder); //рот
C_PC=(TColor)cR;C_BC=(TColor)cR;
Bezier(7*mx,7.7*my,6.8*mx,7.6*my,6.9*mx,7.65*my);
Bezier(6.8*mx,7.6*my,7*mx,7.8*my,6.9*mx,7.68*my);
Bezier(7*mx,7.8*my,7.2*mx,7.6*my,7.1*mx,7.68*my);
Bezier(7.2*mx,7.6*my,7*mx,7.7*my,7.1*mx,7.65*my);
C_F(7*mx,7.75*my,cR,fsBorder);
//туловище
C_PC=(TColor)RGB(255,36,4); C_BC=(TColor)RGB(255,36,4); //левая часть
Bezier(7*mx,8.1*my,6.2*mx,7.7*my,6.5*mx,7.8*my); Bezier(6.2*mx,7.7*my,5*mx,8.5*my,5.5*mx,8*my); Bezier(5*mx,8.5*my,4.3*mx,10*my,4.7*mx,9.3*my); Bezier(4.3*mx,10*my,3.9*mx,10.2*my,4.1*mx,10.1* my);
Bezier(3.9*mx,10.2*my,4*mx,10.6*my,3.8*mx,10.3* my);
Bezier(4*mx,10.6*my,4.3*mx,10.5*my,4.1*mx,10.5* my);
Bezier(4.3*mx,10.5*my,4.5*mx,10.9*my,4.2*mx,10.9* my);
Bezier(4.5*mx,10.9*my,4.9*mx,10.5*my,4.7*mx,10.7* my);
Bezier(4.9*mx,10.5*my,6*mx,9.2*my,5.2*mx,9.7*my); Bezier(6*mx,9.2*my,7*mx,10*my,6.5*mx,9.3*my); Bezier(7*mx,10*my,7*mx,8.1*my,7*mx,9*my); C_F(6*mx,8.8*my,(TColor)RGB(255,36,4),fsBorder); //правая часть
Bezier(7*mx,8.1*my,7*mx,10*my,7*mx,9*my);
Bezier(7*mx,10*my,8*mx,9.2*my,8.5*mx,9.3*my); Bezier(8*mx,9.2*my,9.1*mx,10.5*my,8.8*mx,9.7*my); Bezier(9.1*mx,10.5*my,9.5*mx,10.9*my,9.3*mx,10.7* my);
Bezier(9.5*mx,10.9*my,9.7*mx,10.5*my,9.8*mx,10.9* my);
Bezier(9.7*mx,10.5*my,10*mx,10.6*my,9.9*mx,10.5* my);
Bezier(10*mx, 10.6*my, 10.1*mx, 10.2*my, 10.2^, 10.3 *my);
Bezier(10.1*mx,10.2*my,9.7*mx,10*my,9.9*mx,10.1* my);
Bezier(9.7*mx,10*my,9*mx,8.5*my,9.3*mx,9.3*my); Bezier(9*mx,8.5*my,7.8*mx,7.7*my,8.5*mx,8*my); Bezier(7.8*mx,7.7*my,7*mx,8.1*my,7.5*mx,7.8*my); C_F(9*mx,9.5*my,(TColor)RGB(255,36,4),fsBorder); //левая нога
C_PC=(TColor)RGB(252,71,3); C_BC=(TColor)RGB(252,71,3); Bezier(7*mx,10*my,6*mx,9.2*my,6.5*mx,9.3*my); Bezier(6*mx,9.2*my,4.9*mx,10.5*my,5.2*mx,9.7*my); Bezier(4.9*mx,10.5*my,4.5*mx,11.1*my,4.7*mx,11* my);
Bezier(4.5*mx,11.1*my,5*mx,11.4*my,4.5*mx,11.5* my);
Bezier(5*mx,11.4*my,6.2*mx,11.1*my,5.7*mx,11.2* my);
Bezier(6.2*mx,11.1*my,7*mx,10*my,6.7*mx,10.6*my); C_F(6*mx,10*my,(TColor)RGB(252,71,3),fsBorder); //правая нога
Bezier(7*mx,10*my,7.8*mx,11.1*my,7.3*mx,10.6*my); Bezier(7.8*mx,11.1*my,9*mx,11.4*my,8.3*mx,11.2* my);
Bezier(9*mx,11.4*my,9.5*mx,11.1*my,9.5*mx,11.5* my);
Bezier(9.5*mx,11.1*my,9.1*mx,10.5*my,9.3*mx,11* my);
Bezier(9.1*mx,10.5*my,8*mx,9.2*my,8.8*mx,9.7*my); Bezier(8*mx,9.2*my,7*mx,10*my,8.5*mx,9.3*my); C_F(8*mx,10*my,(TColor)RGB(252,71,3),fsBorder); // часть тела
C_PC=(TColor)RGB(255,36,4);
C_BC=(TColor)RGB(255,36,4);
Bezier(7*mx,10*my,6.2*mx,11.1*my,6.7*mx,10.6*my);
Bezier(6.2*mx,11.1*my,7.8*mx,11.1*my,7*mx,11*my);
Bezier(7.8*mx,11.1*my,7*mx,10*my,7.3*mx,10.6*my);
C_F(7*mx,10.5*my,(TColor)RGB(255,36,4),fsBorder);
//стрелки
//левая стрелка
C_PC=(TColor)0;C_BC=(TColor)0;
p1[0].x=4.4*mx;p1[0].y=6.7*my;
p1[1].x=3.2*mx;p1[1].y=6.6*my;
p1[2].x=3.8*mx;p1[2].y=7.5*my;
p1[з].x=4.4*mx;p1[з].y=6.7*my;
C_P(p1,3);
p2[0].x=4*mx;p2[0].y=7.3*mx;
p2[1].x=6.7*mx;p2[1].y=9.1*my;
p2[2].x=6.9*mx;p2[2].y=8.7*my;
p2[з].x=4.2*mx;p2[з].y=6.9*my;
p2[4].x=4*mx;p2[4].y=7.3*my;
C_P(p2,4);
//правая стрелка
p3[0].x=10.6*mx;p3[0].y=8.4*my;
pз[1].x=10.6*mx;pз[1].y=9.6*my;
p3[2].x=11.5*mx;p3[2].y=9*my;
p3[3].x=10.6*mx;p3[3].y=8.4*my;
C_P(p3,3);
p4[0].x=7.3*mx;p4[0].y=8.8*my;
p4[1].x=7.3*mx;p4[1].y=9.2*my;
p4[2].x=10.6*mx;p4[2].y=9.2*my;
p4[3].x=10.6*mx;p4[3].y=8.8*my;
p4[4].x=7.3*mx;p4[4].y=8.8*my;
C_P(p4,4);
//люлька
C_PC=(TColor)RGB(22,22,22); C_BC=(TColor)RGB(22,22,22); C_E(6.8*mx,8.7*my,7.4*mx,9.3*my); C_PC=(TColor)0;C_BC=(TColor)0;
//9
C_E(2.4*mx,8.5*my,2.9*mx,9.2*my); C_BC=(TColor)RGB(255,138,176); C_E(2.5*mx,8.6*my,2.8*mx,9.1*my); C_BC=(TColor)0;
C_C(2.4*mx,8.8*my,2.9*mx,9.5*my,2.4*mx,9.3*my,2.9 *mx,9.3*my);
C_PC=(TColor)RGB(255,138,176); C_BC=(TColor)RGB(255,138,176); C_C(2.5*mx,8.7*my,2.8*mx,9.4*my,2.5*mx,9.3*my,2.8 *mx,9.3*my);
C_PC=(TColor)0;C_BC=(TColor)0; C_P_W=3;
C_M(2.8*mx,9.05*my);C_L(2.8*mx,9.3*my); C_P_W=1;
//6
C_E(6.75*mx,13.2*my,7.25*mx,13.9*my); C_BC=(TColor)RGB(255,138,176); C_E(6.85*mx,13.3*my,7.15*mx,13.9*my); C_BC=(TColor)0;
C_C(6.75*mx,12.9*my,7.25*mx,13.6*my,7.25*mx,13.2 *my,6.75*mx,13.2*my);
C_PC=(TColor)RGB(255,138,176); C_BC=(TColor)RGB(255,138,176); C_C(6.85*mx,13*my,7.15*mx,13.5*my,7.15*mx,13.25* my,6.65*mx,13.25*my);
C_PC=(TColor)0;C_BC=(TColor)0;C_P_W=3; C_M(6.8*mx,13.2*my);C_L(6.8*mx,13.4*my);C_P_ W=1; //12 //1
C_P_W=3;
C_M(6.4*mx,4.7*my);C_L(6.7*mx,4.2*my);C_L(6.7*mx ,5.3*my); C_P_W=1;
//2
C_C(7.1*mx,4.2*my,7.6*mx,4.7*my,7.6*mx,4.5*my,7.1 *mx,4.5*my);
C_PC=(TColor)RGB(255,138,176);
C_BC=(TColor)RGB(255,138,176);
C_C(7.2*mx,4.3*my,7.5*mx,4.8*my,7.5*mx,4.8*my,7.1 *mx,4.5*my);
C_PC=(TColor)0;C_BC=(TColor)0;
C_P_W=3;
C_M(7.5*mx,4.5*my);C_L(7*mx,5.3*my);C_L(7.5*mx,5 .3*my);
C_P_W=1;
//3
C_C(11.4*mx,8.6*my,11.9*mx,9*my,11.9*mx,9*my,11.4 *mx,8.8*my);
C_PC=(TColor)RGB(255,138,176);C_BC=(TColor) RGB(255,138,176);
C_C(11.5*mx,8.7*my,11.8*mx,9.1*my,11.8*mx,9.1*my, 11.5*mx,8.8*my);
C_PC=(TColor)0;C_BC=(TColor)0;
C_C(11.4*mx,9*my, 11.9*mx,9.5*my, 11.4*mx,9.3*my,11 .9*mx,9*my);
C_PC=(TColor)RGB(255,138,176);C_BC=(TColor) RGB(255,138,176);
C_C(11.5*mx,9.1*my,11.8*mx,9.4*my,11.5*mx,9.3*my, 11.8*mx,8.9*my);
C_PC=(TColor)0;C_BC=(TColor)0;C_P_W=3;
C_M(11.8*mx,8.9*my);C_L(11.7*mx,9*my);C_L(11.8* mx,9.1*my);
C_P_W=1;}
//----------------------------------------------------------------------
void _fastcall TForm1::Bezier(short StartX, short
StartY, short EndX,
short EndY, short CenterX, short CenterY) {TPoint p[4];
p[0]=Point(StartX,StartY);p[1]=Point(CenterX,Cente rY);
p[2]=Point(EndX,EndY);p[3]=Point(EndX,EndY); Canvas->PolyBezier(p,3);}
//----------------------------------------------------------------------
void_fastcall TForm1::ShowGrid( )
{int x,y;
C_PC=(TColor)R_B; //горизонтальные линии сетки for(y=0;y<=18*my;y+=my) {C_M(0,y);C_L(14*my,y);} //вертикальные линии сетки for(x=0;x<=14*mx;x+=mx)
{C_M(x,0);C_L(x,18*mx);} }
//---------------------------------------------------------------------
Рисунок 1.Часы
Список литературы: 1. Архангельский А.Я. , Тагин М.А. Программирование в C++Builder 6 и 2006.-М.: ООО «Бином-Пресс», 2007г.-1184с.: ил.