中点画圆算法实现(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);

}

说明:最后一个函数是八分法画圆!

 


作者  :  sailor

仅仅看明白了还不够,能把别人给讲明白了才算及格。


  1. 学习了,虽然看不懂~~回访mark~

    May 15th, 2011 at 06:46 am 回复
      1. sailor
        sailor

        没有什么懂不懂,我们也是被实习逼的

        May 15th, 2011 at 12:26 pm 回复
  2. 好厉害啊,呵呵,支持下了啊。。

    May 15th, 2011 at 08:29 am 回复
      1. sailor
        sailor

        谢谢支持哦

        May 15th, 2011 at 12:27 pm 回复
  3. jack
    3#
    jack

    我是来学习的

    May 17th, 2011 at 01:24 pm 回复
      1. sailor
        sailor

        嘿嘿,欢迎常来

        May 17th, 2011 at 05:47 pm 回复
  4. 星星
    4#
    星星

    能不能解释解释?不然光代码根本没有用

    May 9th, 2014 at 04:24 pm 回复
      1. YQC
        YQC

        不好意思,这是很久之前记录的东西啦,我也忘记了。

        June 21st, 2014 at 07:14 pm 回复


最新文章