Поиск по сайту.


Другие алгоритмы.

Графика и обработка изображений. Фракталы.

Рисование окружностей по алгоритму Брезенхейма.

Целочисленный алгоритм рисования окружностей.
Пример кода на языке С.

void Circle(int x, int y, int r,unsigned char color)
{
        int x1,y1,yk = 0;
        int sigma,delta,f;

        x1 = 0;
        y1 = r;
        delta = 2*(1-r);

        do
        {
                PutPixel(x+x1,y+y1,color);
                PutPixel(x-x1,y+y1,color);
                PutPixel(x+x1,y-y1,color);
                PutPixel(x-x1,y-y1,color);

                f = 0;
                if (y1 < yk)
                        break;
                if (delta < 0)
                {
                        sigma = 2*(delta+y1)-1;
                        if (sigma <= 0)
                        {
                                x1++;
                                delta += 2*x1+1;
                                f = 1;
                        }
                }
                else
                if (delta > 0)
                {
                        sigma = 2*(delta-x1)-1;
                        if (sigma > 0)
                        {
                                y1--;
                                delta += 1-2*y1;
                                f = 1;
                        }
                }
                if (!f)
                {
                        x1++;
                        y1--;
                        delta += 2*(x1-y1-1);
                }
        }
        while(1);
}

На Паскале:

	Procedure Circle(x,y,rr:integer);
var xi,yi,r,di,lim,s,ss:integer;
label 1,2,3,4,10,20,30;
Begin
r:=rr;
xi:=0; yi:=r; di:=2*(1-r); lim:=0;
1: SetPixel(xi+x,yi+y);
   SetPixel(xi+x,-yi+y);
   SetPixel(-xi+x,yi+y);
   SetPixel(-xi+x,-yi+y);
   if yi0then goto 3;
   if di=0 then goto 20;
2: s:=2*di+2*yi-1;
   if s<=0then goto 10;
   if s>0then goto 20;
3: s:=2*di+2*xi-1;
   if s<=0then goto 20;
   if s>0then goto 30;
10:xi:=xi+1;
   di:=di+2*xi+1;
   goto 1;
20:xi:=xi+1;
   yi:=yi-1;
   di:=di+2*xi-2*yi+2;
   goto 1;
30:yi:=yi-1;
   di:=di-2*yi+1;
   goto 1;
4:
end;
	
	



Вверх по странице, к оглавлению и навигации.