实验一名称:基本图形的生成算法要求:(1)掌握DDA生成线段算法(2)掌握Bresenham生成线段算法(3)掌握生成圆弧算法1.代码(1)Bresenham画线算法voidCDlgBresenhamLine::OnBresenhamBUTTON2(){UpdateData(true);CDC*pDC=m_picture.GetDC();intxa=m_start_x,ya=m_start_y,xb=m_end_x,yb=m_end_y,c=RGB(0,255,0);intdx=abs(xa-xb),dy=abs(ya-yb);intp=2*dy-dx;intx,y;if(xaxb){x=xb;y=yb;xb=xa;}else{x=xa;y=ya;}while(xxb){x++;if(p0)p+=2*dy;else{y++;p+=2*(dy-dx);}pDC-SetPixel((int)x,(int)y,c);}ReleaseDC(pDC);}(2)中点画圆算法voidCDMidpointcircleDlg::OncircleBUTTON2(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(true);CDC*pDC=m_picture.GetDC();intxc=m_x,yc=m_y,r=m_r,c=RGB(255,0,0);intd=(5-r*4)/4;intx=0,y=r;while(x=y){pDC-SetPixel(xc+x,yc+y,c);pDC-SetPixel(xc+x,yc-y,c);pDC-SetPixel(xc-x,yc+y,c);pDC-SetPixel(xc-x,yc-y,c);pDC-SetPixel(xc+y,yc+x,c);pDC-SetPixel(xc+y,yc-x,c);pDC-SetPixel(xc-y,yc+x,c);pDC-SetPixel(xc-y,yc-x,c);if(d0)d+=2*x+3;else{d+=2*(x-y)+5;y--;}x++;}ReleaseDC(pDC);}2.结果截图(1)Bresenham画线(2)中点画圆3.算法流程(1)Bresenham画线(2)中点画圆①输入圆的半径r和圆心坐标(Xc,Yc),先计算以原点为圆心、r为半径的圆周上的点,令初始点为(X0,Y0)=(0,r)。②求初始判别式d,d=1-r。③在每一个Xn的位置,从n=0开始,进行下列检测:如果d0,则圆心在原点的的下一个点为为(Xn+1,Yn),且d=d+2*Xn+3,;否则,圆的下一个点为(Xn+1,Yn-1),且d=d+2*(Xn-Yn)+5.④确定(Xn+1,Yn+1)乍看情况后家7个八分圆中的对称点位置。⑤将计算出的每个像素位置(X,Y)平移到圆心位于(Xc,Yc)的圆的轨迹上,即分别沿水平和垂直方向平移Xc和Yc,平移后的坐标值为(X’,Y’),X’=X+Xc,Y’=Y+Yc。⑥重复第③至⑤步,直到X=Y时为止。4.总结本次实验,让我了解到了一些基本图形生成算法:Bresenham算法、数值微分法、中点法等,各种算法画线和画圆都有各自的步骤和特点,尤其在同时比较时更能突出算法的不同效果。初步了解这些基本算法,为我在以后的学习中打下了基础。