求画圆的算法(函数设置两个参数,一个是圆心坐标,另一个是圆周上任意点的坐标)

解决方案 »

  1.   

    你改写一下下面的代码
    /////////////////////////////////////////////////////////////////////////////
    // Draw a circle
    /////////////////////////////////////////////////////////////////////////////
    void circleMidpoint(int xCenter,int yCenter,int radius,HDC dc)
    {
    int x = 0;
    int y = radius;
    int p=1-radius;
    while(x<y)
    {
    x++;
    if(p<0)
    {
    p+=2*x+1;
    }
    else
    {
    y--;
    p+=2*(x-y)+1;
    }
    SetPixel(dc,xCenter+x,yCenter+y,RGB(255,0,0));
    SetPixel(dc,xCenter-x,yCenter+y,RGB(255,0,0));
    SetPixel(dc,xCenter+x,yCenter-y,RGB(255,0,0));
    SetPixel(dc,xCenter-x,yCenter-y,RGB(255,0,0)); SetPixel(dc,xCenter+y,yCenter+x,RGB(255,0,0));
    SetPixel(dc,xCenter-y,yCenter+x,RGB(255,0,0));
    SetPixel(dc,xCenter+y,yCenter-x,RGB(255,0,0));
    SetPixel(dc,xCenter-y,yCenter-x,RGB(255,0,0));
    }
    }
      

  2.   

    void DrawCircle(CDC *pDC,CPoint pCentre,CPoint pCircle)
    {
    int r = sqrt((pCentre.x - pCircle.x)*(pCentre.x - pCircle.x)+(pCentre.y-pCircle.y)*(pCentre.y-pCircle.y));
    int d = sin(0.78539815)*r;
    CRect cirRect(pCentre.x-d,pCentre.y-d,pCentre.x+d,pCentre.y+d);
    pDC->Ellipse(&cirRect);
    }
      

  3.   

    那就改成这样的吧:上午对Ellipse函数理解错误,它画的是内且圆。
    void CTestDlg::DrawCircle(CDC *pDC, CPoint pCentre, CPoint pCircle)
    {
    int r = sqrt((pCentre.x - pCircle.x)*(pCentre.x - pCircle.x)+(pCentre.y-pCircle.y)*(pCentre.y-pCircle.y));
    CRect cirRect(pCentre.x-r,pCentre.y-r,pCentre.x+r,pCentre.y+r);
    pDC->Ellipse(&cirRect);
    // pDC->SetPixel(pCentre,RGB(255,0,0));
    // pDC->SetPixel(pCircle,RGB(255,0,0));
    }
      

  4.   

    int nr=........
    CPoint RectLU,RectRD,Circle;//圆心坐标
    RectLU=RectRD=Circle;
    RectLU.Offset(-nr,-nr);
    RectRD.Offset(nr,nr);
    pdc->Ellipse(CRect(RectLU,RectRD));   
    我也来一个。