实验二 圆的生成算法

实验二 圆的生成算法

一、实验目的

1、 通过实验,进一步理解和掌握中点画圆算法的基本原理;

2、 掌握以上算法生成圆和圆弧的基本过程;

3、 掌握在C/C++环境下完成用中点算法圆或圆弧的绘制方法。

二、实验内容

用中点算法实现圆或圆弧的绘制。

三、实验步骤

1.算法分析:

中点画圆算法设计:

函数为F(x,y)=x2+y2-r2的构造圆,半径r等于鼠标响应事件得到的亮点坐标的距离,即r=sqrt((xb-xa)(xb-xa)+(yb-ya)(yb-ya))。

设d=F(x,y),判断d的符号,d=0的M点在圆上,d>0的M点在圆外,d<0的M点在圆内。

当x=0、y=r时,d的初值为1.25-r,绘制该点和其在八分圆上的另外7个点。

当d>=0时,d更新为d+2x+3,(x,y)更新为(x+1,y);当d<0时,d更新为d+2*(x-y)+5,(x,y)更新为(x+1,y+1)。

当x

2.效果截图

Image.png

3.算法实现代码:
void CJob2View::OnzhongdianCircle()
{
// TODO: Add your command handler code here

CDC *p=GetDC();
int radius=80,color=RGB(255,0,255);
int x0=300,y0=200,m,n;
double d;
m=0;
n=radius;
d=1.25-radius;
while(m<=n)
{
p->SetPixel(m+x0,n+y0,color);
p->SetPixel(n+x0,m+y0,color);
p->SetPixel(-m+x0,n+y0,color);
p->SetPixel(n+x0,-m+y0,color);
p->SetPixel(m+x0,-n+y0,color);
p->SetPixel(-n+x0,m+y0,color);
p->SetPixel(-m+x0,-n+y0,color);
p->SetPixel(-n+x0,-m+y0,color);
if(d<0) //选择T

        d+=2*m+3;

    else{                          //选择B
               
            d+=2*(m-n)+5;
            n--;
        }
    m++;
    }
    ReleaseDC(p);   

}

你可能感兴趣的:(实验二 圆的生成算法)