C++计算机图形学圆的生成算法

如何解析以下的圆生成算法 其中x y r是什么作用 我要将他改成任意圆的生成算法应该如何改呢?

void CprimitiveView::OnZDBresenham()
{
    // TODO: 在此添加命令处理程序代码
    CDC* pDC = this->GetDC();

    int R = 100;
    int x = 0, y = R, d = 1 - R;
    while (x <= y)
    {
        pDC->SetPixel(x + R, y + R, RGB(255, 0, 0));
        pDC->SetPixel(x + R, R - y, RGB(255, 0, 0));
        pDC->SetPixel(R - x, y + R, RGB(255, 0, 0));
        pDC->SetPixel(R - x, R - y, RGB(255, 0, 0));
        pDC->SetPixel(y + R, R - x, RGB(255, 0, 0));
        pDC->SetPixel(y + R, x + R, RGB(255, 0, 0));
        pDC->SetPixel(R - y, R - x, RGB(255, 0, 0));
        pDC->SetPixel(R - y, x + R, RGB(255, 0, 0));

        if (d < 0)
        {
            d += 2 * x + 3;
        }
        else
        {
            d += 2 * (x - y) + 5;
            y--;
        }
        x++;
    }
    //ReleaseDC(pDC);
}

x y 是圆心,r是半径,这个代码的作用是在以x y为圆心,r为半径的圆的外接正方形的4个顶点和4个切点分别绘制一个红色的像素。