Facebook
From Walloping Capybara, 1 Year ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 137
  1.  
  2. #include<stdio.h>
  3. #include<conio.h>
  4. #include<graphics.h>
  5. #include<math.h>
  6. void clip(float,float,float);
  7. int i,j=0,n;
  8. int rx1,rx2,ry1,ry2;
  9. float x1[8],y1[8];
  10. int main()
  11. {
  12. int gd=DETECT,gm;
  13. int i,n;
  14. float x[8],y[8],m;
  15. //clrscr();
  16. initgraph(&gd,&gm,"");
  17. printf("coordinates for rectangle : ");
  18. scanf("%d%d%d%d",&rx1,&ry1,&rx2,&ry2);
  19. printf("no. of sides for polygon : ");
  20. scanf("%d",&n);
  21. printf("coordinates : ");
  22. for(i=0;i<n;i++)
  23. {
  24. scanf("%f%f",&x[i],&y[i]);
  25. }
  26. cleardevice();
  27. outtextxy(10,10,"Before clipping");
  28. outtextxy(10,470,"Press any key....");
  29. rectangle(rx1,ry1,rx2,ry2);
  30. for(i=0;i<n-1;i++)
  31. line(x[i],y[i],x[i+1],y[i+1]);
  32. line(x[i],y[i],x[0],y[0]);
  33. getch();
  34. cleardevice();
  35. for(i=0;i<n-1;i++)
  36. {
  37. m=(y[i+1]-y[i])/(x[i+1]-x[i]);
  38. clip(x[i],y[i],m);
  39. clip(x[i+1],y[i+1],m);
  40. }
  41. m=(y[i]-y[0])/(x[i]-x[0]);
  42. clip(x[i],y[i],m);
  43. clip(x[0],y[0],m);
  44. outtextxy(10,10,"After clipping");
  45. outtextxy(10,470,"Press any key....");
  46. rectangle(rx1,ry1,rx2,ry2);
  47. for(i=0;i<j-1;i++)
  48. line(x1[i],y1[i],x1[i+1],y1[i+1]);
  49. getch();
  50. }
  51.  
  52. void clip(float e,float f,float m)
  53. {
  54. while(e<rx1,e>rx2,f<ry1,f>ry2)
  55. {
  56. if(e<rx1)
  57. {
  58. f+=m*(rx1-e);
  59. e=rx1;
  60. }
  61. else if(e>rx2)
  62. {
  63. f+=m*(rx2-e);
  64. e=rx2;
  65. }
  66. if(f<ry1)
  67. {
  68. e+=(ry1-f)/m;
  69. f=ry1;
  70. }
  71. else if(f>ry2)
  72. {
  73. e+=(ry2-f)/m;
  74. f=ry2;
  75. }
  76. }
  77. x1[j]=e;
  78. y1[j]=f;
  79. j++;
  80. }
  81.