绘制一个圆–原理就是根据中点Bresenham算法在第一象限内X∈[0,R/√2]绘制出1/8的圆弧,最后通过对称关系绘制出其他的7份圆弧。
OnDraw函数绘制坐标系。
void CTest2View::OnDraw(CDC* pDC)
{
CTest2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
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);
pDC->MoveTo(-rect.Width()/2,0);
pDC->LineTo(rect.Width()/2,0);
pDC->LineTo(rect.Width()/2-20,20);
pDC->MoveTo(rect.Width()/2,0);
pDC->LineTo(rect.Width()/2-20,-20);
pDC->MoveTo(0,rect.Height()/2);
pDC->LineTo(0,-rect.Height()/2);
pDC->MoveTo(0,rect.Height()/2);
pDC->LineTo(20,rect.Height()/2-20);
pDC->MoveTo(0,rect.Height()/2);
pDC->LineTo(-20,rect.Height()/2-20);
pDC->TextOut(4,15,"O");
DrawGraph(pDC);
}
DrawGraph函数绘制圆
void CTest2View::DrawGraph(CDC *pDC)
{
double R;
R=fabs(begin.x-end.x)/2;
double x,y,d;
d=1.25-R;
x=0;
y=R;
for(x=0;x<=y;x++)
{
//八分法画圆子函数
//圆心坐标
CPoint pc=CPoint((begin.x+end.x)/2.0,(begin.y+end.y)/2.0);
//定义圆的边界颜色
COLORREF clr=RGB(0,0,255);
pDC->SetPixelV(x+pc.x,y+pc.y,clr); //x,y
pDC->SetPixelV(y+pc.x,x+pc.y,clr); //y,x
pDC->SetPixelV(y+pc.x,-x+pc.y,clr);//y,-x
pDC->SetPixelV(x+pc.x,-y+pc.y,clr);//x,-y
pDC->SetPixelV(-x+pc.x,-y+pc.y,clr);//-x,-y
pDC->SetPixelV(-y+pc.x,-x+pc.y,clr);//-y,-x
pDC->SetPixelV(-y+pc.x,x+pc.y,clr);//-y,x
pDC->SetPixelV(-x+pc.x,y+pc.y,clr);//-x,y
if (d<0)
d+=2*x+3;
else
{
d+=2*(x-y)+5;
y--;
}
}
}
运行截图: