Cohen-SutherLand的线段裁剪算法,在tc上运行现在已有程序#include<graphics.h>#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8#define XL 100#define XR 400#define YB 100#define YT 400void encode();void C_S_LineCLip(x1, y1, x2, y2)float x1, y1, x2, y2;/*(x1,y1)与(x2,y2)是线段端点坐标,其它四个参数分别定义窗口的左,下,右,上边界*/{int code1,code2,code;float x,y;encode(x1,y1,&code1);encode(x2,y2,&code2);while((code1!=0) || (code2!=0)){if((code1&code2)!=0)return;code=code1;if(code1==0)code=code2;if((LEFT&code)!=0)/*线段与左边界相交*/{ x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1);}else if((RIGHT&code)!=0)/*线段与右边界相交*/{ x=XR; y= y1+(y2-y1)*(XR-x1)/(x2-x1);}else if((BOTTOM&code)!=0)/*线段与下边界相交*/{ y=YB; x=x1+(x2-x1)*(YB-y1)/(y2-y1);}else if((TOP&code)!=0) /* 线段与上边界相交*/{ y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1);}if(code==code1){x1=x;y1=y;encode(x,y,&code1);}else{x2=x;y2=y;encode(x,y,&code2);}}line((int)x1,(int)y1,(int)x2,(int)y2);return;}void encode(x, y, code)float x, y;int *code;{ int c; c=0; if(x<XL) c=c | LEFT; else if (x>XR)c=c | RIGHT; if(y<YB) c=c | BOTTOM; else if(y>YT)c=c | TOP; *code=c; return;}main(){int graphdriver=VGA;int graphmode=VGAHI;float px1,py1,px2,py2;initgraph(&graphdriver,&graphmode,"c://turboc2");rectangle(XL,YB,XR,YT);printf("Please input two end points of the line that will be cilped: ");scanf("%f%f%f%f",&px1,&py1,&px2,&py2);C_S_LineCLip(px1, py1, px2, py2);getch();closegraph();}这个程序是直接显示处理完的图形现在想加上 能自己输入矩形剪裁窗口的大小,并且能够看到没剪裁的时候的图形,然后一回车就是剪裁后的图形,应该怎么改?在线等,急需!
0
|