实验4:直线或多边形裁剪Ø 实验目的:实现标准矩形窗口的裁剪,窗口由键盘输入或鼠标确定,直线/多边形都是任意的裁剪后的图形要准确,不能多或者少点Ø 实验内容及要求:对于直线/多边形的裁剪实验,要求实现标准矩形窗口的裁剪,窗口由键盘输入或鼠标确定,直线/多边形都是任意的裁剪后的图形要准确,不能多或者少点对于上述两个实验都要求掌握各自算法的基本原理和算法设计,画出算法实现的程序流程图,使用C或者VC++实现算法,并演示Ø 实验原理:Ø 实验代码:#include #include #include #include typedef struct{ float x,y;}Point;void initgraphics(void);void Code(Point FrameLT,Point FrameRB,Point P,unsigned char *Flag);void Clipping(Point FrameLT,Point FrameRB,Point LineSP,Point LineEP);void main(void){ Point FrameLT,FrameRB; Point P[3]; initgraphics(); setcolor(RED); FrameLT.x=200;FrameLT.y=100; FrameRB.x=460;FrameRB.y=360; rectangle((int)FrameLT.x,(int)FrameLT.y,(int)FrameRB.x,(int)FrameRB.y); P[0].x=330; P[0].y=80; P[1].x=150; P[1].y=300; P[2].x=510; P[2].y=200; line((int)P[0].x,(int)P[0].y,(int)P[1].x,(int)P[1].y); line((int)P[0].x,(int)P[0].y,(int)P[2].x,(int)P[2].y); line((int)P[1].x,(int)P[1].y,(int)P[2].x,(int)P[2].y); getch(); cleardevice(); rectangle((int)FrameLT.x,(int)FrameLT.y,(int)FrameRB.x,(int)FrameRB.y); Clipping(FrameLT,FrameRB,P[0],P[1]); Clipping(FrameLT,FrameRB,P[0],P[2]); Clipping(FrameLT,FrameRB,P[1],P[2]); getch(); closegraph();}void initgraphics(void){ int driver=VGA,mode=VGAHI; int errcode; initgraph(&driver,&mode,""); if((errcode=graphresult())!=0) { printf("Graphics error:%s\n",grapherrormsg(errcode)); exit(1); }}void Code(Point FrameLT,Point FrameRB,Point P,unsigned char *Flag){ unsigned char flag=0; if(P.xFrameRB.x) flag+=2; if(P.y>FrameRB.y) flag+=4; if(P.y
输入完毕后生成一个窗口,随后要求依次输入被切割的多边形的各个顶点(这里出现了点问题,无法规定输入的是多少边的多边形……目前程序里输入的是三角形,想切割多边形只能直接改程序段之后再摁一次执行,即可看到三角形被窗口切割了。