Cohen Sutherland Line Clipping Algorithm In C
This is only the code and the output. Explanation of the code will follow soon. Stay Tuned!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #include<conio.h> #include<stdio.h> #include<graphics.h> #include<math.h> void bytecode(); void sutherland(); int a[4],b[4]; float m,xnew,ynew; float xl = 100, yl = 100, xh = 300, yh = 300,xa = 10,ya = 200,xb = 250, yb = 150; void main() { int gd = DETECT,gm; initgraph(&gd,&gm,"C:\\TURBOC3\\BGI"); setcolor(5); line(xa,ya,xb,yb); setcolor(12); rectangle(xl,yl,xh,yh); m = (yb-ya)/(xb-xa); bytecode(); sutherland(); getch(); } void bytecode() { if(xa < xl) a[3] = 1; else a[3] = 0; if(xa>xh) a[2] = 1; else a[2] = 0; if(ya < yl) a[1] = 1; else a[1] = 0; if (ya > yh) a[0] = 1; else a[0] = 0; if(xb < xl) b[3] = 1; else b[3] = 0; if(xb>xh) b[2] = 1; else b[2] = 0; if(yb < yl) b[1] = 1; else b[1] = 0; if (yb > yh) b[0] = 1; else b[0] = 0; } void sutherland() { printf("press a key to continue"); getch(); if(a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0 && b[0] == 0 && b[1] == 0 && b[2] == 0 && b[3] == 0 ) { printf("no clipping"); line(xa,ya,xb,yb); } else if(a[0]&&b[0] || a[1]&&b[1] || a[2]&&b[2] || a[3]&&b[3]) { clrscr(); printf("line discarded"); rectangle(xl,yl,xh,yh); } else { if(a[3] == 1 && b[3]==0) { ynew = (m * (xl-xa)) + ya; setcolor(12); rectangle(xl,yl,xh,yh); setcolor(0); line(xa,ya,xb,yb); setcolor(15); line(xl,ynew,xb,yb); } else if(a[2] == 1 && b[2] == 0) { ynew = (m * (xh-xa)) + ya; setcolor(12); rectangle(xl,yl,xh,yh); setcolor(0); line(xa,ya,xb,yb); setcolor(15); line(xl,ynew,xb,yb); } else if(a[1] == 1 && b[1] == 0) { xnew = xa + (yl-ya)/m; setcolor(0); line(xa,ya,xb,yb); setcolor(15); line(xnew,yh,xb,yb); } else if(a[0] == 1 && b[0] == 0) { xnew = xa + (yh-ya)/m; setcolor(0); line(xa,ya,xb,yb); setcolor(15); line(xnew,yh,xb,yb); } } } |
Before Clipping |
After Clipping |
helpful cohen sutherland line algo
ReplyDeleteWhat will happen when b[] ==1 you have not included that condition
ReplyDeleteVery very helpful to me, easy to understand
ReplyDelete