注册 登录
编程论坛 VC++/MFC

用mfc实现中点画圆但为什么我画出来的只是8分之一的圆?

新月飞鸟 发布于 2012-10-28 20:27, 2807 次点击
void CTestbView::OnMipCircle()
{
    // TODO: Add your command handler code here
   
    /*int x,y,R;
    double d;
    CInputDlg dlg;
    if(dlg.DoModal()==IDOK)
    {
        x=dlg.m_x;
        y=dlg.m_y;
        R=dlg.m_R;
        
    }
    CDC* pDC=GetDC();
    d=1.25-R;

    pDC->SetPixel(x,y,RGB(255,0,0));
    while(x<y)
    {
        if(d<0)
        {
            d+=2*x+3;
            x++;
        }
        else
        {
            d+=2*(x-y)+5;
            x++;
            y--;
        }
     pDC->SetPixel(x,y,RGB(255,0,0));

    }
    pDC->SetPixel(y,x,RGB(255,0,0));
    pDC->SetPixel(-x,y,RGB(255,0,0));
    pDC->SetPixel(x,-y,RGB(255,0,0));
    pDC->SetPixel(-x,-y,RGB(255,0,0));
    pDC->SetPixel(-y,x,RGB(255,0,0));
    pDC->SetPixel(y,-x,RGB(255,0,0));
    pDC->SetPixel(-y,-x,RGB(255,0,0));
    ReleaseDC(pDC);*/
4 回复
#2
cqtddt2012-10-28 22:47
你的程序和你输入对话框中的值有关系,x<y的条件也不对,假如你输入的x>y,只画八个点而已.你要仔细考虑.用Ellipse,再进行画刷填充
#3
新月飞鸟2012-10-29 11:26
回复 2楼 cqtddt
我是按照书上写的程序做的,书上说要画出完整的圆只需修改坐标,对称即可,但我画出来的只是第一象限上半部分的圆,而且我也实现不了任意点的圆心画圆,不知道怎么弄!!至于你说的画刷~~~~我们老师都没有说,看来又得自己找资料了~~
#4
hellovfp2012-10-29 13:06
http://www.
#5
新月飞鸟2012-10-29 21:40
回复 4楼 hellovfp
谢咯~~~~不过我今天也画出来咯~~
void CTestBView::OnDRAWCircle()
{
    // TODO: Add your command handler code here
    int x0,y0,R,x,y,p;
    CInputDlg dlg;
    if(dlg.DoModal()==IDOK)
    {
        x0=dlg.m_x;
        y0=dlg.m_y;
        R=dlg.m_R;
        
    }
    x=0; y=R;
    CDC* pDC=GetDC();
    p=3-2*R;
    for(;x<y;x++)
    {
    pDC->SetPixel(x+x0,y+y0,RGB(255,0,0));
    pDC->SetPixel(y+x0,x+y0,RGB(255,0,0));

    pDC->SetPixel(-x+x0,y+y0,RGB(255,0,0));
    pDC->SetPixel(x+x0,-y+y0,RGB(255,0,0));
    pDC->SetPixel(-x+x0,-y+y0,RGB(255,0,0));
    pDC->SetPixel(-y+x0,x+y0,RGB(255,0,0));
    pDC->SetPixel(y+x0,-x+y0,RGB(255,0,0));
    pDC->SetPixel(-y+x0,-x+y0,RGB(255,0,0));
        if(p>0)
        {
            p+=4*(x-y)+10;
            y--;
        }
        else
            p+=4*x+6;

    }


        ReleaseDC(pDC);
   
}
1