С для профессиональных программистов



         

Сборка подпрограмм - часть 8


yerr+=delta_y;

if (xerr>distance)

xerr-=distance;

startx+=incx;

if (yerr>distance)

yerr-=distance;

starty+=incy;

 

/* закрашивание прямоугольника в заданный цвет */

void fill_box(startx,starty,endx,endy,color_code)

int startx,starty,endx,endy,color_code;

register int i,begin,end;

begin=startx<endx ? startx:endx;

end=startx>endx ? startx:endx;

for (i=begin;i<=end;++i)

line(i,starty,i,endy,color_code);

 

/* изображение   окружности   с    использованием    алгоритма

Брезенхама */

void circle(x_center,y_center,radius,color_code)

int x_center,y_center,radius,color_code;

register x,y,delta;

asp_ratio=1.0; /* это число меняется в различных

случаях */

y=radius;

delta=3-2*radius;

for (x=0;x<y; )

plot_circle(x,y,x_center,y_center,color_code);

if (delta<0)

delta+=4*x+6;

else

delta+=4*(x-y)+10;

y--;

x++;

x=y;

if (y) plot_circle(x,y,x_center,y_center,color_code);

/* plot_circle печатает точки, определяющие окружность */

void plot_circle(x, y, x_center, y_center, color_code)

int x_center,y_center,radius,color_code;

int x, y, startx, starty, endx, endy, x1, y1;

starty=y*asp_ratio;

endy=(y+1)*asp_ratio;

startx=x*asp_ratio;

endx=(x+1)*asp_ratio;

for (x1=startx;x1<endx;++x1)

mempoint(x1+x_center,y+y_center,color_code);

mempoint(x1+x_center,y_center-y,color_code);

mempoint(x_center-x1,y+y_center,color_code);

mempoint(x_center-x1,y_center-y,color_code);

for (y1=starty;y1<endy;++y1)

mempoint(y1+x_center,x+y_center,color_code);

mempoint(y1+x_center,y_center-x,color_code);

mempoint(x_center-y1,x+y_center,color_code);

mempoint(x_center-y1,y_center-x,color_code);




Содержание  Назад  Вперед