Привет, Shadow Angel!
SA>Где можно найти описание этого алгоритма?
В инете ссылок что-то не видно,
здесь только есть реализация алгоритма:
void V_MIcirc (xc, yc, r, pixel)
int xc, yc, r, pixel;
{ int x, y, d;
x= 0; y= r; d= 3 - 2*r;
while (x < y) {
Pixel_circle (xc, yc, x, y, pixel);
if (d < 0) d= d + 4*x + 6; else {
d= d + 4*(x-y) + 10; --y;
}
++x;
}
if (x == y) Pixel_circle (xc, yc, x, y, pixel);
} /* V_MIcirc */
В общих чертах:
— вычисляется 1/8 окружности для y>=x>=0, остальные ставим по симметрии; в этой области на каждое перемещение по y приходится несколько перемещений по x;
— в переменонй d храним смещение реальной кривой, при этом вводится некоторый масштаб для того, чтобы работать с целыми числами;
— за один шаг по x увеличиваем d;
— если смещение d>=0, то по горизонтали переходим к следующему ряду (y--), d уменьшаем.
d — это некоторая мера отклонения. Откуда она взялась? От Минчера!