Line Clipping
Cohen Sutherland Line Clipping Algorithm
Graphics & Multimedia Lab - C++ Program
Program:
#include<iostream> #include<graphics.h> using namespace std; const int TOP=8,BOTTOM=4,RIGHT=2,LEFT=1; typedef int outcode; outcode compute(int x, int y , int xmax, int ymax, int xmin, int ymin) { outcode oc=0; if(x<xmin) oc|=LEFT; else if(x>xmax) oc|=RIGHT; if(y>ymax) oc|=TOP; else if(y<ymin) oc|=BOTTOM; return oc; } void coh(int x1,int y1,int x2,int y2, int xmin,int ymin, int xmax, int ymax) { bool accept = false, done=false;double m; outcode o1,o2,ot; o1=compute(x1,y1,xmax,ymax,xmin,ymin); o2=compute(x2,y2,xmax,ymax,xmin,ymin); do{ if(!(o1 | o2)) { done=true; accept=true; } else if(o1&o2) { done=true; } else { int x,y; ot=o1?o1:o2; if(ot & TOP) { y=ymax; x = x1 + (x2-x1)*(ymax-y1)/(y2-y1); } else if(ot & BOTTOM) { y=ymin; x = x1 + (x2 - x1) * (ymin - y1) / (y2 - y1); } else if(ot & RIGHT) { x=xmax; y = y1 + (y2 - y1) * (xmax - x1) / (x2 - x1); } else if(ot & LEFT) { x=xmin; y = y1 + (y2 - y1) * (xmin - x1) / (x2 - x1); } if(ot==o1) { x1=x; y1=y; o1=compute(x1,y1,xmax,ymax,xmin,ymin); } else { x2=x; y2=y; o2=compute(x2,y2,xmax,ymax,xmin,ymin); } } }while(done==false); if(accept==true) { line(x1,y1,x2,y2); } } int main() { int gd=DETECT,gm,x,y,j,i; initgraph(&gd,&gm,NULL); outtextxy(150,15, "Cohen Sutherland"); int xmx=200,ymx=200,xmn=100,ymn=100; int ax1=50,ay1=75,bx1=50,by1=325; int ax2=150,ay2=75,bx2=150,by2=325; int ax3=250,ay3=75,bx3=250,by3=325; int ax4=50,ay4=75,bx4=250,by4=75; int ax5=50,ay5=175,bx5=250,by5=175; int ax6=50,ay6=275,bx6=250,by6=275; int ax7=50,ay7=75,bx7=275,by7=275; int ax8=250,ay8=75,bx8=75,by8=275; line(ax1,ay1,bx1,by1); line(ax2,ay2,bx2,by2); line(ax3,ay3,bx3,by3); line(ax4,ay4,bx4,by4); line(ax5,ay5,bx5,by5); line(ax6,ay6,bx6,by6); line(ax7,ay7,bx7,by7); line(ax8,ay8,bx8,by8); setcolor(4); rectangle(xmn,ymn,xmx,ymx); delay(1000); cleardevice(); setcolor(4); rectangle(xmn,ymn,xmx,ymx); setcolor(15); coh(ax1,ay1,bx1,by1,xmn,ymn,xmx,ymx); coh(ax2,ay2,bx2,by2,xmn,ymn,xmx,ymx); coh(ax3,ay3,bx3,by3,xmn,ymn,xmx,ymx); coh(ax4,ay4,bx4,by4,xmn,ymn,xmx,ymx); coh(ax5,ay5,bx5,by5,xmn,ymn,xmx,ymx); coh(ax6,ay6,bx6,by6,xmn,ymn,xmx,ymx); coh(ax7,ay7,bx7,by7,xmn,ymn,xmx,ymx); coh(ax8,ay8,bx8,by8,xmn,ymn,xmx,ymx); delay(1000); getch(); closegraph(); return 0; }
Output:
0 comments:
Post a Comment