中点画圆算法实现(MFC)
之前已经公布了关于Bresenham算法画圆的MFC代码实现方法,今天接着上次的说,继续我的狗血实习,继续写代码,今天要写的中点画圆的算法,还是老规矩,算法我就不仔细解释了,这里直接给出MFC实现方法
代码如下:
void S2MidCircle::MidCircle(CPoint pntStart,CPoint pntEnd,CDC *pDC){
int t1=abs(pntEnd.x-pntStart.x)*abs(pntEnd.x-pntStart.x);
int t2=abs(pntEnd.y-pntStart.y)*abs(pntEnd.y-pntStart.y);
double r=sqrt(double(t1+t2))/2;
int cx=(pntStart.x+pntEnd.x)/2;
int cy=(pntStart.y+pntEnd.y)/2;
int x,y;
float d;
x=0;
y=r;
d=1-r;
CirPot(cx,cy,x,y,pDC);
while(x<y)
{
if(d<0)
{
d+=2*x+3;
x++;
}
else
{
d+=2*(x-y)+5;
x++;
y–;
}
CirPot(cx,cy,x,y,pDC);
}
}
void S2MidCircle::CirPot(int cx, int cy, int x, int y, CDC* pDC)//八分法
{
pDC->SetPixelV((cx+x),(cy+y),m_color);
pDC->SetPixelV((cx+y),(cy+x),m_color);
pDC->SetPixelV((cx+y),(cy-x),m_color);
pDC->SetPixelV((cx+x),(cy-y),m_color);
pDC->SetPixelV((cx-x),(cy-y),m_color);
pDC->SetPixelV((cx-y),(cy-x),m_color);
pDC->SetPixelV((cx-y),(cy+x),m_color);
pDC->SetPixelV((cx-x),(cy+y),m_color);
}