我下了几个程序 是画直线的 老师让我们给讲出来是怎么回事 谁能帮帮我啊 中点画直线CDC*PDC=GetDC ();int xa=500,ya=300,xb=200,yb=400,c=RGB(0,255,0);int temp1,temp2;if(xa>xb){temp1=xa; xa=xb; xb=temp1; temp2=ya; ya=yb; yb=temp2;}int x,y,a,b,d;a=ya-yb;b=xb-xa;float dx,dy,k;dx=(float) (xb-xa),dy=(float) (yb-ya);k=dy/dx,y=ya,x=xa;if(k>0) {if(k>=1) {d=a+2*b; for(y=ya;y<=yb;) {if(d>0) {PDC->SetPixel (x+=1,y+=1,c); d=d+2*a+2*b;} else {PDC->SetPixel (x,y+=1,c); d=d+2*b;}}} else {d=2*a+b; for(x=xa;x<=xb;) {if(d>=0) {PDC->SetPixel(x+=1,y+=1,c); d=d+2*a;} else {PDC->SetPixel(x+=1,y,c); d=d+2*a+2*b;} }}}if(k<0) {if(k>-1) {d=2*a-b; for(x=xa;x<=xb;) {if(d>=0) {PDC->SetPixel(x+=1,y-=1,c); d=d+2*a-2*b;} else {PDC->SetPixel(x+=1,y,c); d=d+2*a;} }}else {d=a-2*b; for(y=ya;y>=yb;) {if(d>=0) {PDC->SetPixel(x,y-=1,c); d=d-2*b;} else {PDC->SetPixel(x+=1,y-=1,c); d=d+a*2-2*b;} }}} ReleaseDC(PDC); DDA画直线CDC* PDC=GetDC ();int xa=500,ya=600,xb=400,yb=100,c=RGB (255,0,0);float x,y;int temp1,temp2;if(xa>xb){temp1=xa; xa=xb; xb=temp1; temp2=ya; ya=yb; yb=temp2;}float dx,dy,k;dx=(float) (xb-xa),dy=(float) (yb-ya);k=dy/dx;x=xa;y=ya;if(k>0){if(k<1) {for(x=xa;x<=xb;) {PDC->SetPixel(x+=1,int(y+0.5),c); y=y+k;} } else {for(y=ya;y<=yb;) {PDC-> SetPixel (int(x+0.5),y+=1,c); x=x+1.0/k;}}}if(k<0){if(k>-1) {for(x=xa;x<=xb;) {PDC->SetPixel(x+=1,int(y-0.5),c); y=y+k;}} else {for(y=ya;y>=yb;) {PDC->SetPixel(int(x+0.5),y-=1,c); x=x-1.0/k;}}} ReleaseDC (PDC); bresen画直线CDC* PDC=GetDC ();int x1=400,y1=500,x2=500,y2=400;int temp1,temp2;if(x1>x2){temp1=x1; x1=x2; x2=temp1; temp2=y1; y1=y2; y2=temp2;}int value=RGB(0,0,255);float b,m,x,y;float dx,dy,p;dx=x2-x1;dy=y2-y1;m=dy/dx;x=x1;y=y1;if(m>0) {if(m<1) {p=2*dy-dx; for(x=x1;x<=x2;) {if(p>=0) {PDC->SetPixel(x+=1,y+=1,value); p=p+2*(dy-dx);} else {PDC->SetPixel(x+=1,y,value); p=p+2*dy;}}} else {p=dy-2*dx; for(y=y1;y<=y2;) {if(p>=0) {PDC->SetPixel(x,y+=1,value); p=p-2*dx;} else {PDC->SetPixel(x+=1,y+=1,value); p=p+2*dy-2*dx;}}}}else {if(m>-1) {p=2*dy+dx; for(x=x1;x<=x2;) {if(p>=0) {PDC->SetPixel(x+=1,y-=1,value); p=p+2*dy;} else {PDC->SetPixel(x+=1,y,value); p=p+2*dx+2*dy;}}} else {p=-2*dx-dy; for(y=y1;y>=y2;) {if(p>=0) {PDC->SetPixel(x+=1,y-=1,value); p=p+2*(dy+dx);} else {PDC->SetPixel(x,y-=1,value); p=p+2*dx;}}}}ReleaseDC (PDC);
|