实验二 圆的生成算法
一、实验目的
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<y时,重复计算绘制点
2.效果截图
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);
}