C++ для начинающих Рисование окружности алгоритм Брезенхайма

в C++ для рисования окружности есть встроенная функция circle, но иногда требуется чуть-чуть другой подход к построению. В частности иногда окружность требуется построить с помощью алгоритма Брезенхайма. Найти этот алгоритм довольно легко.

Код C++ Окружность по алгоритму Брезенхайма

==============
 #include <graphics.h>
#include <iostream.h>

//Окружность по алгоритму Брезенхайма
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*(1r);

    do
    {
        putpixel(x+x1,y+y1,color);
        putpixel(xx1,y+y1,color);
        putpixel(x+x1,yy1,color);
        putpixel(xx1,yy1,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*(deltax1)-1;
            if (sigma > 0)
            {
                y1–;
                delta += 12*y1;
                f = 1;
            }
        }
        if (!f)
        {
            x1++;
            y1–;
            delta += 2*(x1y11);
        }
    }
    while(1);
}

void main()
{
 int R=100;
//Задаем радиус
 double x;
 double y;

 int gdriver=DETECT,gm;
 initgraph(&gdriver,&gm,“”);

 x=getmaxx()/2;
 y=getmaxy()/2;

 Circle(x,y,R,1);
 cin.get();
}

==============
 Самую нужную часть хорошо комментировать я не смогу. Но кое что поясню. В отличии от встроенной функции, описываемая здесь называется по другому. Различны регистры букв. К регистру стоит быть всегда внимательным. Кроме этого, тут проявился некоторый эффект, который немного противоречит правилам хорошего тона программирования. Я заранее знаю какие значения должен принимать центр окружности и, размышляя логически, могу инициализировать x,y сразу в момент объявления, но при попытке такой инициализации и дальнейшей работы, у меня программа срабатывала не так как я того ожидал. Во время инициализации графического режима эти x,y меняли свое значение и вся инициализация во время объявления теряла смысл.Поэтому присваивание им значений я выполнил непосредственно перед вызовом функции. Это слегка забавно, но это стоит расценивать только как: “Будьте внимательны”.

Leave a comment