计算机图形学作业科目:计算机图形学学号:1060414014016姓名:秦红志一、作业要求1.根据直线方程y=kx+b,使用C语言绘制直线。2.考虑直线的斜率为0<=k<=1时的直线DDA方法。3.任意斜率直线的DDA方法。4.直线的斜率为0<=k<=1时,直线的中点画线法。5.斜率为0<=k<=1时,直线的布兰森汉姆画线法。二、实现OnDraw部分代码及运行结果截图1.根据直线方程y=kx+b,使用C语言绘制直线。代码:intx0=0,y0=0;intx1=200,y1=200;doublek=(y1-y0)/(x1-x0);doubleb=y0-k*x0;for(x0=0;x0<=400;x0++){pDC->SetPixel(x0,k*x0+b,RGB(0,0,255));}运行结果:2.考虑直线的斜率为0<=k<=1时的直线DDA方法。代码:intx0=0,y0=0,x1=200,y1=200;intx;floatdx,dy,y,k;dx=x1-x0,dy=y1-y0;k=dy/dx,y=y0;for(x=x0;x<=x1;x++){pDC->SetPixel(x+100,int(y+0.5)+100,RGB(0,0,255));y=y+k;}运行结果:3.任意斜率直线的DDA方法。代码:intx0=0,y0=0,x1=-200,y1=-200;inty;floatdx,dy,x,k;dx=x1-x0,dy=y1-y0;intx0=-200,y0=0,x1=200,y1=0;inty;floatdy,dx,x,k;dx=x1-x0,dy=y1-y0;if(dy>0)//当直线处于一、二象限时或与y轴平行时{k=dy/dx,x=x0;for(y=y0;y<=y1;y++){pDC->SetPixel(int(x+0.5)+400,y+200,RGB(0,0,255));x=x+k;}}if(dy<0)//当直线处于三、四象限时或与y轴平行时{k=dy/dx,x=x0;for(y=y0;y>=y1;y--){pDC->SetPixel(-int(x+0.5)+400,y+200,RGB(0,0,255));x=x+k;}}else//当直线与x轴平行时{if(dx>0)//绘制直线的正方向部分{k=dy/dx,y=y0;for(x=x0;x<=x1;x++){pDC->SetPixel(x+400,int(y+0.5)+200,RGB(0,0,255));y=y+k;}}if(dx<0)//绘制直线的正方向部分{k=dy/dx,y=y0;for(x=x0;x>=x1;x--){pDC->SetPixel(x+400,int(y+0.5)+200,RGB(0,0,255));y=y+k;}}}运行结果:4.直线的斜率为0<=k<=1时,直线的中点画线法。代码:intx0=0,y0=0,x1=400,y1=200;inta,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;delta1=2*a;delta2=2*(a+b);x=x0;y=y0;pDC->SetPixel(x,y,RGB(255,0,0));while(xSetPixel(x,y,RGB(255,0,0));}运行结果:5.斜率为0<=k<=1时,直线的布兰森汉姆画线法。代码:intx1=0,y1=0,x2=400,y2=200;intdx,dy;intx,y;intd,d1,d2;intinc,tmp;dx=x2-x1;dy=y2-y1;if(dx*dy>=0)inc=1;elseinc=-1;if(abs(dx)>abs(dy)){if(dx<0){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;dx=-dy;dy=-dy;}d=2*dy-dx;d1=2*dy;d2=2*(dy-dy);x=x1;y=y1;pDC->SetPixel(x,y,RGB(255,0,0));while(xSetPixel(x,y,RGB(255,0,0));}}else{if(dy<0){tmp=x1;x1=x2;x2=tmp;tmp=y1;y1=y2;dx=-dy;dy=-dy;}d=2*dx-dy;d1=2*dx;d2=2*(dx-dy);x=x1;y=y1;pDC->SetPixel(x,y,RGB(255,0,0));while(ySetPixel(x,y,RGB(255,0,0));}}}运行结果: