Wu反走样圆

原理:参考Bresenham算法,在主位移过程中计算出离理想圆最近的两个点,赋予不同的亮度值,绘制像素点即可!

MFC 中CXXXView类中添加函数:
//Wu算法画反走样圆
void CMy3_4View::OnwuCir() 
{
    // TODO: Add your command handler code here
    yoci5 dlg;//定义对话框 对象 yoci5:对话框类
    if(IDOK==dlg.DoModal())
    {
        int y=dlg.m_R;//对话框输入半径、圆心
        double e;
        for(int x=0; x<=y; x++)//画1/8圆
        {
            //算上下两点到理想圆的距离,作为亮度参数
            e=y-sqrt(dlg.m_R*dlg.m_R-(x+1)*(x+1));

            if(e>=1)
            {
                e--;
                y--;
            }
            div_8(x, y, e);
            div_8(x, y-1, 1-e);
        }
    }
}

//8分法画圆
void CMy3_4View::div_8(int x, int y, double d)
{
    CDC *pDC = GetDC();
    //定义二维坐标系
    CRect rect;
    GetClientRect(&rect);
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(rect.Width(), rect.Height());
    pDC->SetViewportExt(rect.Width(), -rect.Height());
    pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);
    rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);

    COLORREF clr = RGB(d*255, d*255, d*255);
    pDC->SetPixelV(x, y, clr);
    pDC->SetPixelV(y, x, clr);  //关于y=x对称
    pDC->SetPixelV(y, -x, clr); 
    pDC->SetPixelV(x, -y, clr); //关于x=0对称
    pDC->SetPixelV(-x, -y, clr);//关于原点对称
    pDC->SetPixelV(-y, -x, clr);
    pDC->SetPixelV(-y, x, clr); 
    pDC->SetPixelV(-x, y, clr); //关于y=0对称

    pDC->DeleteDC();
}

附上效果图:

1.对话框
![](https://img2018.cnblogs.com/blog/1027722/201810/1027722-20181009200628145-709943253.jpg)

2.反走样圆

https://img2018.cnblogs.com/blog/1027722/201810/1027722-20181009200108679-1901193419.jpg(复制链接到搜索框即可查看)


VC++ 6.0编译通过!如有问题,请留言。