int mx=30,my=30;
__fastcall
TForm1::TForm1(TComponent*
Owner)
: TForm(Owner)
{ }
void __fastcall TForm1::ShowGrid(int cenx)
{int x,y;
C_P_C=(TColor)R_B;
//
горизонтальные линии сетки
for(y=0;y<=18*my;y+=my)
{C_M(0,y);C_L(28*mx,y);}
//
вертикальные линии сетки
for(x=0;x<=28*mx;x+=mx)
{C_M(x,0);C_L(x,18*my);}}
void __fastcall TForm1::XoY(int cenx, int ceny)
{//
оси
//
ось
X
C_P_W=2;
C_M(cenx-9*mx,ceny);C_L(cenx+9*mx,ceny);
//
стрелка
C_M(cenx+8.5*mx,ceny-
0.25*my);C_L(cenx+9*mx,ceny);
C_L(cenx+8.5*mx,ceny+0.25*my);C_T(cenx+8.5
*mx,ceny-1*my,"X");
//
ось
Y
C_M(cenx,ceny-
8.8*my);C_L(cenx,ceny+8.8*my);
//
стрелка
C_M(cenx-0.25*mx,ceny-
8.3*my);C_L(cenx,ceny-8.8*my);
C_L(cenx+0.25*mx,ceny-
8.3*my);C_T(cenx+0.5*mx,ceny-8.9*my,"Y");
C_P_W=1;}
void __fastcall TForm1::line(int x1, int y1, int x2,
int y2,int color)
{int x,y,dx,dy,sx,sy,d,d1,d2,e,e2;
dx=abs(x2-x1);dy=abs(y2-y1);
sx=x1e=dx-dy;
for(;;)
{C_P[x1][y1]=(TColor)color;
if (x1==x2 && y1==y2) break;
e2=e*2;
if (e2>-dy)
{ e-=dy; x1+=sx; }
if (e2{ e+=dx; y1+=sy; } }}
void __fastcall TForm1::DrawArc(int cenx, int
ceny, int radx, int rady,
bool dotted, int color)
{int x,y;int a2,b2,d,e;
x=0;y=rady;
if (radx==rady)
{a2=1;b2=1;}
else
{a2=radx*radx;
b2=rady*rady; }
d=b2-2*a2*rady+a2; e=0;
int counter=0;
while (y>=0)
{if (dotted && ((counter %20) !=9) && ((counter
%20) !=10) && ((counter % 20)
!=11)) DrawDot(cenx,ceny,x,y,color);
if (!dotted) DrawDot(cenx,ceny,x,y,color);
++counter;
//
ошибка для случая 1 или2
e=2*(d+a2*y)-a2;
if (d<0 && e<=0)
{//
шаг
mh
++x; d+=2*b2*x+b2;
continue; }
//
ошибка для случая 4 или 5
e=2*(d-b2*x)-b2;
//
шаг
mv
if(d>0 && e>0)
{--y; d+=a2-2*a2*y;
continue; }
//
шаг
md
++x; d+=2*(b2*x-a2*y)+a2+b2;
--y; }}
void __fastcall TForm1::DrawDot(int cenx, int
ceny, int x, int y, int color)
{C_P[cenx+x][ceny+y]=(TColor)color;
C_P[cenx+x][ceny-y]=(TColor)color;
C_P[cenx-x][ceny+y]=(TColor)color;
C_P[cenx-x][ceny-y]=(TColor)color; }
void __fastcall TForm1::DrawArc_1(int cenx, int
ceny, int radx, int rady,
bool dotted, int color)
{int x,y;int a2,b2,d,e;
x=0;y=rady;
if (radx==rady)
{a2=1;b2=1;}
else
{a2=radx*radx;b2=rady*rady; }
d=b2-2*a2*rady+a2; e=0;
int counter=0;
while (y>=0)
{ if (!dotted && (counter % 8==0)) Draw-
Dot_1(cenx,ceny,x,y,color);
++counter;
//
ошибка для случая 1 или2
e=2*(d+a2*y)-a2;
if (d<0 && e<=0)
{//
шаг
mh
++x; d+=2*b2*x+b2;
continue; }
//
ошибка для случая 4 или 5
e=2*(d-b2*x)-b2;
//
шаг
mv
if(d>0 && e>0)
{--y; d+=a2-2*a2*y;
continue; }
//
шаг
md
++x; d+=2*(b2*x-a2*y)+a2+b2;
--y; }}
void __fastcall TForm1::DrawDot_1(int cenx, int
ceny, int x, int y, int color)
{C_P[cenx+x][ceny+y]=(TColor)color;
Евразийский Союз Ученых (ЕСУ) #
12 (21), 2015 |
ТЕХНИЧЕСКИЕ НАУКИ
31
C_P[cenx+x][ceny-y]=(TColor)color;
C_P[cenx-x][ceny+y]=(TColor)color;
C_P[cenx-x][ceny-y]=(TColor)color;
line(cenx-x,ceny-y,cenx-x,ceny,R_G);
line(cenx+x,ceny,cenx+x,ceny-y,R_G);}
void __fastcall TForm1::DrawArc_2(int cenx, int
ceny, int radx, int rady,
bool dotted, int color)
{int x,y;int a2,b2,d,e;
x=0;y=rady;
if (radx==rady)
{a2=1;b2=1;}
else
{a2=radx*radx;b2=rady*rady; }
d=b2-2*a2*rady+a2; e=0;
int counter=0;
while (y>=0)
{ if (!dotted && (counter % 8==0)) Draw-
Dot_2(cenx,ceny,x,y,color);
++counter;
//
ошибка для случая 1 или2
e=2*(d+a2*y)-a2;
if (d<0 && e<=0)
{//
шаг
mh
++x; d+=2*b2*x+b2;
continue; }
//
ошибка для случая 4 или 5
e=2*(d-b2*x)-b2;
//
шаг
mv
if(d>0 && e>0)
{--y; d+=a2-2*a2*y;
continue; }
//
шаг
md
++x; d+=2*(b2*x-a2*y)+a2+b2;
--y; }}
void __fastcall TForm1::DrawDot_2(int cenx, int
ceny, int x, int y, int color)
{C_P[cenx+x][ceny+y]=(TColor)color;
C_P[cenx+x][ceny-y]=(TColor)color;
C_P[cenx-x][ceny+y]=(TColor)color;
C_P[cenx-x][ceny-y]=(TColor)color;
line(cenx-x,ceny,cenx-x,ceny+y,R_G);
line(cenx+x,ceny,cenx+x,ceny+y,R_G);}
void
__fastcall
TForm1::FormPaint(TObject
*Sender)
{Color=(TColor)cW;
int xc=14*mx,yc=9*my,r1=8*my,i;
int a=8*mx,b=3.5*my,a1=5.25*mx,b1=1.5*my;
ShowGrid(xc);
DrawArc(xc,yc,r1,r1,true,cB);
DrawArc(xc,yc,a,b,false,cB);
DrawArc(xc,yc-5.75*my,a1,b1,false,R_G);
DrawArc(xc+1,yc-5.75*my+1,a1,b1,false,R_G);
DrawArc(xc+1,yc-5.75*my-1,a1,b1,false,R_G);
DrawArc(xc,yc+5.75*my,a1,b1,false,R_G);
DrawArc(xc+1,yc+5.75*my+1,a1,b1,false,R_G);
DrawArc(xc+1,yc+5.75*my-1,a1,b1,false,R_G);
//
наклонные
линии
//1
line(xc-7.2*mx,yc-
3.5*my,xc+7.2*mx,yc+3.5*my,R_G);
line(xc-7.2*mx-1,yc-3.5*my+1,xc+7.2*mx-
1,yc+3.5*my+1,R_G);
line(xc-7.2*mx-1,yc-3.5*my+2,xc+7.2*mx-
1,yc+3.5*my+2,R_G);
//2
line(xc+7.2*mx,yc-3.5*my,xc-
7.2*mx,yc+3.5*my,R_G);
line(xc+7.2*mx-1,yc-3.5*my+1,xc-7.2*mx-
1,yc+3.5*my+1,R_G);
line(xc+7.2*mx-1,yc-3.5*my+2,xc-7.2*mx-
1,yc+3.5*my+2,R_G);
//
горизонтальные линии
//1
line(xc-7.2*mx,yc-3.5*my,xc+7.2*mx,yc-
3.5*my,R_G);
line(xc-7.2*mx-1,yc-3.5*my-1,xc+7.2*mx-1,yc-
3.5*my-1,R_G);
line(xc-7.2*mx-1,yc-3.5*my+1,xc+7.2*mx-1,yc-
3.5*my+1,R_G);
//2
line(xc-
7.2*mx,yc+3.5*my,xc+7.2*mx,yc+3.5*my,R_G);
line(xc-7.2*mx-1,yc+3.5*my-1,xc+7.2*mx-
1,yc+3.5*my-1,R_G);
line(xc-7.2*mx-1,yc+3.5*my+1,xc+7.2*mx-
1,yc+3.5*my+1,R_G);
//3
line(xc-5.35*mx,yc-5.75*my,xc+5.35*mx,yc-
5.75*my,R_G);
line(xc-5.35*mx-1,yc-5.75*my-1,xc+5.35*mx-
1,yc-5.75*my-1,R_G);
line(xc-5.35*mx-1,yc-5.75*my+1,xc+5.35*mx-
1,yc-5.75*my+1,R_G);
//4
line(xc-
5.35*mx,yc+5.75*my,xc+5.35*mx,yc+5.75*my,R_G);
line(xc-5.35*mx-1,yc+5.75*my-1,xc+5.35*mx-
1,yc+5.75*my-1,R_G);
line(xc-5.35*mx-1,yc+5.75*my+1,xc+5.35*mx-
1,yc+5.75*my+1,R_G);
//
вертикальные линии
line(xc-7.2*mx,yc-3.5*my,xc-
7.2*mx,yc+3.5*my,R_G);//1
line(xc-7.2*mx-1,yc-3.5*my-1,xc-7.2*mx-
1,yc+3.5*my-1,R_G);
line(xc-7.2*mx+1,yc-3.5*my-1,xc-
7.2*mx+1,yc+3.5*my-1,R_G);
line(xc+7.2*mx,yc-
3.5*my,xc+7.2*mx,yc+3.5*my,R_G);//2
line(xc+7.2*mx-1,yc-3.5*my-1,xc+7.2*mx-
1,yc+3.5*my-1,R_G);
line(xc+7.2*mx+1,yc-3.5*my-
1,xc+7.2*mx+1,yc+3.5*my-1,R_G);
DrawArc_1(xc,yc-5.75*my,a1,b1,false,R_G);
DrawArc_2(xc,yc+5.75*my,a1,b1,false,R_G);
//
штриховка
for(i=0;i<=11;i++)
{line(xc-7.2*mx,yc-3.5*my+9*i,xc-
7.2*mx+18*i,yc-3.5*my+9*i,R_G);
line(xc+7.2*mx-18.5*i,yc+3.5*my-
9*i,xc+7.2*mx,yc+3.5*my-9*i,R_G);}
C_P_C=(TColor)cB;
XoY(xc,yc);}
32
Евразийский Союз Ученых (ЕСУ) #
12 (21), 2015 |
ТЕХНИЧЕСКИЕ НАУКИ
Рисунок 1. Построение заданной фигуры по алгоритму Брезенхема
0>0>0>Do'stlaringiz bilan baham: |