Средней точки

Алгоритм построения окружности методом

Рассмотрим уравнение окружности радиуса с центром в начале координат

(4.6)

Введем в рассмотрение функцию окружности

(4.7)

Любая точка ,которая лежит на окружности удовлетворяет урав­нению

Если точка находится внутри круга, то функция окружности будет иметь отрицательное значение. Если точка лежит за пределами круга, значение функции окружности будет положительным. Подытоживая, можно сказать, что от­носительное положение любой точки с координатами ) определяется проверкой знака функции окружности:

(4.8)

Проверка выполняется на каждом этапе выборки для средних положений между пикселями вблизи заданной окружности. Таким образом, функция окружности – это параметр принятия решения в алгоритме средней точки, и для этой функции можно установить операции приращения, как это было сделано для алгоритма построения прямой линии.

На рис. 4.1 показана средняя точка между двумя возможными пикселями в точке выборки. Предположим, что мы только что поставили точку в пикселе с координатами Теперь нужно определить, какой из двух пикселей ближе к заданной окружности — пиксель с координатами или пиксель с координатами Параметром принятия решения будет функция окружности (4.7), которая рассчитывается для средней точки между этими двумя пикселями:


Рис.4.2

В случае, когда , полагаем (если средняя точка внутри окружности, то она (окружность) ближе к верхнему пикселу). Тогда

где

При этом

Тогда

,

, ,

для

В случае, когда , делаем шаг вниз (если средняя точка вне окружности, то она(окружность) ближе к нижнему пикселу), полагая . Тогда

,

где

Для рассматриваемого случая, когда , получаем

При этом

Тогда

Таким образом

,

,

для

Рассмотрим алгоритмы вычисления и для случая, когда , .

В этом случае

И выражение для принимает вид

Таким образом, если , то

,

если , то

Для удобства заменим в выражениях для и на , тогда

для

При получаем

Начальные значения параметров и определим из условия и

Тогда

Поскольку радиус и приращение, целые числа, то значение можно округлить и принять

Подводя итог изложенному, запишем в собранном виде алгоритм построения окружности методом средней точки.

Установить начальные значение для

Поставить начальные точки

Выполнять в цикле пока

если , то

если , то

Поставить точки, соответствующие текущему шагу (рис. 4.3)

Рис. 4.3

Приводимая ниже функция расставляет точки окружности, соответствующие текущему шагу.

void CirclePoints(CDC& dc,int x,int y,CPoint &P,COLORREF color)

{

dc.SetPixel(x+P.x,y+P.y,color); //1

dc.SetPixel(y+P.x,x+P.y,color); //2

dc.SetPixel(y+P.x,-x+P.y,color); //3

dc.SetPixel(x+P.x,-y+P.y,color); //4

dc.SetPixel(-x+P.x,-y+P.y,color); //5

dc.SetPixel(-y+P.x,-x+P.y,color); //6

dc.SetPixel(-y+P.x,x+P.y,color); //7

dc.SetPixel(-x+P.x,y+P.y,color); //8

}

Приводимая ниже функция реализует алгоритм построения окружности методом средней точки.

void MyCircle(CDC& dc,CPoint &P,int r,COLORREF color)

{

int x=0;

int y=r;

int d=1-r;

int p=3;

int q=-2*r+5;

CirclePoints(dc,x,y,P,color);

while(y>x)

{

if(d<0)

{

d+=p;

p+=2;

q+=2;

x++;

}

else

{

d+=q;

p+=2;

q+=4;

x++;

y--;

}

CirclePoints(dc,x,y,P,color);

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: