这是一个画弧问题;知道圆弧圆心坐标:x,y半径:r,圆弧的起始角度a,终止角度b.
用CDC的AngleArc函数来画,可我画出来就是不对,郁闷......         double X = x + r * cos(a);
         double Y = y + y * sin(a);
pDC->MoveTo(X,Y);
pDC->AngleArc(x,y,r,startangle,(b - a));

解决方案 »

  1.   

    cos/sin用的是弧度(pi),AngleArc用的是角度(360)你用的是什么?
             double X = x + r * cos(a);
             double Y = y + y * sin(a);
    pDC->MoveTo(X,Y);
             float rA,rB,rStartangle;
             rA=a*180/3.1415926;
             rB=b*180/3.1415926;
             rStartangle=startangle*180/3.1415925;
    pDC->AngleArc(x,y,r,startangle,(rB - rA));
      

  2.   

    double X = x + r * cos(a);
             double Y = y + y * sin(a);  //r*sin(a)
      

  3.   

    to : stonespace
    原始参数都是角度
             double X = x + r * cos(a*3.1415926535/180);
             double Y = y + r * sin(a*3.1415926535/180);
    pDC->MoveTo(X,Y);
              pDC->AngleArc(x,y,r,a,(b - a));
    以上写法对不对?如果对请看下面代码
             double X = 300 + 200 * cos(90*3.1415926535/180);
             double Y = 300 + 200 * sin(90*3.1415926535/180);
    pDC->MoveTo(X,Y);
              pDC->AngleArc(300,300,200,90,(270 - 90));
    可画出来是一个封闭的半圆,为何是封闭的?
      

  4.   

    可能和坐标系有关,CDC坐标系y轴向下,试试这样:
             double X = 300 + 200 * cos(90*3.1415926535/180);
             double Y = 300 - 200 * sin(90*3.1415926535/180);
    pDC->MoveTo(X,Y);
              pDC->AngleArc(300,300,200,90,(270 - 90));
      

  5.   

    to : stonespace         double X = 300 + 200 * cos(90*3.1415926535/180);
             double Y = 300 - 200 * sin(90*3.1415926535/180);
    pDC->MoveTo(X,Y);
              pDC->AngleArc(300,300,200,90,(270 - 90));
    如此是正确的,但我用的坐标模式是MM_LOMETRIC,再请看下面代码:void CTestviewView::OnDraw(CDC* pDC)
    {
    CTestviewDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    CRect clientRect;
    GetClientRect(clientRect);
    pDC->SetMapMode(MM_LOMETRIC);
    pDC->SetViewportOrg(0,clientRect.bottom);
    double pi = 3.1415926535;
    double x;
    double y;
    x = 300 + 200 * cos(pi*315/180);
    y = 300 - 200 * sin(pi*315/180);
    pDC->MoveTo(x,y);
    pDC->AngleArc(300,300,200,315,(90-315));
    }
    画出来的图形不对!
    我的原意是从第四象限的对角线开始画弧,逆时针画,画到y轴终止。以上写法对不对?
    我的理解:画弧都是逆时针画,起始角和终止角都为正,终止角可以小于起始角。不知这样理解对不对
      

  6.   

    msdn的说明中,AngleArc总是逆时针画,最后一个参数是扫过的角度,所以我理所当然的认为不应当小于0,所以我也没试过。按照正常的用法,无论如何都可以保证最后一个参数>0,根据逆时针的方向,确定起始点位置。调用api,虽然有时候可以用msdn没有说的方式调用,但是我认为还是按照msdn的说明按正常方式调用比较可靠。