1、#include#include#includeclip_a_line(int x1,int y1,int x2,int y2,int xw_min,int xw_max,int yw_min,int yw_max);int encode(int x,int y,int code,int xw_min,int xw_max,int yw_min,int yw_max);int accept(int code1,int code2);int reject(int code1,int code2);int swap_if_needed(int code1,int code2);void main(
2、)int x1=100,x2=600,y1=80,y2=550,xw_min=200,xw_max=500,yw_min=200,yw_max=500;initgraph(640,640);setcolor(GREEN);line(xw_min,yw_min,xw_max,yw_min);line(xw_min,yw_max,xw_max,yw_max);line(xw_min,yw_min,xw_min,yw_max);line(xw_max,yw_min,xw_max,yw_max);outtextxy(200,20,“按回车键继续“);getch();cleardevice();clos
3、egraph();initgraph(640,640);line(x1,y1,x2,y2);setcolor(GREEN);line(xw_min,yw_min,xw_max,yw_min);line(xw_min,yw_max,xw_max,yw_max);line(xw_min,yw_min,xw_min,yw_max);line(xw_max,yw_min,xw_max,yw_max);outtextxy(200,20,“按回车键继续“);getch();cleardevice();closegraph();/*开始剪裁*/initgraph(640,640);setcolor(GREE
4、N);line(xw_min,yw_min,xw_max,yw_min);line(xw_min,yw_max,xw_max,yw_max);line(xw_min,yw_min,xw_min,yw_max);line(xw_max,yw_min,xw_max,yw_max);setcolor(RED);clip_a_line(x1,y1,x2,y2,xw_min,xw_max,yw_min,yw_max);outtextxy(50,50,“Cohen-SutherLand!“);getch();closegraph();clip_a_line(int x1,int y1,int x2,int
5、 y2,int xw_min,int xw_max,int yw_min,int yw_max)int i,code14,code24,done,display;float m;int x11,x22,y11,y22,mark;done=0;display=0;while(done=0)x11=x1;x22=x2;y11=y1;y22=y2;encode(x1,y1,code1,xw_min,xw_max,yw_min,yw_max);encode(x2,y2,code2,xw_min,xw_max,yw_min,yw_max);if(accept(code1,code2)done=1;dis
6、play=1;break;else if(reject(code1,code2)done=1;break;mark=swap_if_needed(code1,code2);if(mark=1)x1=x22;x2=x11;y1=y22;y2=y11;if(x2=x1)m=-1;elsem=(float)(y2-y1)/(float)(x2-x1);if(code12)x1+=(yw_min-y1)/m;y1=yw_min;else if(code13)x1-=(y1-yw_max)/m;y1=yw_max;else if(code10)y1-=(x1-xw_min)*m;x1=xw_min;el
7、se if(code11)y1+=(xw_max-x1)*m;x1=xw_max;if(display=1)line(x1,y1,x2,y2);int encode(int x,int y,int code,int xw_min,int xw_max,int yw_min,int yw_max)int i;for(i=0;ixw_max)code1=1;if(yyw_max)code3=1;else if(yyw_min)code2=1;return(0);int accept(int code1,int code2)int i,flag;flag=1;for(i=0;i4;i+)if(cod
8、e1i=1) | (code2i=1)flag=0;break;return(flag);int reject(int code1,int code2)int i,flag;flag=0;for(i=0;i4;i+)if(code1i=1) break;return(flag);int swap_if_needed(int code1,int code2)int i,flag1,flag2,tmp;flag1=1;for(i=0;i4;i+)if(code1i=1)flag1=0;break;flag2=1;for(i=0;i4;i+)if(code2i=1)flag2=0;break;if(flag1=0) if(flag1=1) i4;i+)tmp=code1i;code1i=code2i;code2i=tmp;return(1);return(0);