Headlines
Computer graphics program - Liang-Barsky Line clipping algorithm

Computer graphics program - Liang-Barsky Line clipping algorithm

Liang-Barsky Line clipping algo
Liang-Barsky Line clipping algorithm program
Code
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<stdlib.h>
void main()
{
 int gd = DETECT, gm, k;
float x1, y1, x2, y2, xmin, ymin, xmax, ymax, dx, dy, p[4], q[4], r[4], u1=0.0, u2=1.0;
 initgraph(&gd, &gm, "c:\\tc\\bgi");
 clrscr();
printf("\nENTER THE BOUNDARIES OF THE CLIPPING WINDOW(XMIN, YMIN, XMAX, YMAX):");
 scanf("%f %f %f %f", &xmin, &ymin, &xmax, &ymax);
printf("\n\nENTER THE VALUES OF THE TWO END POINTS OF THE LINE( (X1, Y1) AND (X2, Y2) ):");
 scanf("%f %f %f %f", &x1, &y1, &x2, &y2);
 clrscr();
 rectangle(xmin, ymax, xmax, ymin);
 line(x1, y1, x2, y2);
 getch();
 dx = x2 - x1;
 dy = y2 - y1;
 p[0] = -dx;
 p[1] = dx;
 p[2] = -dy;
 p[3] = dy;
 q[0] = x1 - xmin;
 q[1] = xmax - x1;
 q[2] = y1 - ymin;
 q[3] = ymax - y1;
 for(k = 0; k <= 3; k++)
 {
  if(p[k] == 0 && q[k] < 0)
  {
printf("THE LINE IS COMPLETELY OUTSIDE THE CLIPPING WINDOW.........");
   getch();
  }
 }
 for(k = 0; k <= 3; k++)
 {
  if(p[k] < 0)
  {
   r[k] = q[k] / p[k];
   

u1 = max(u1, r[k]);
  }
  if(p[k] > 0)
  {
   r[k] = q[k] / p[k];
   u2 = min(u2, r[k]);
  }
 }
 if(u1 > u2)
 {
printf("THE LINE IS COMPLETELY OUTSIDE THE CLIPPING WINDOW.........");
  getch();
 }
 if(u1 == 0.0 && u2 == 1.0)
 {
printf("THE LINE IS COMPLETELY INSIDE THE CLIPPING WINDOW.........");
  getch();
 }
 if(u1 < u2 && u1 != 0.0 && u2 != 1.0)
 {
  x2 = x1 + (dx * u2);
  y2 = y1 + (dy * u2);
  x1 = x1 + (dx * u1);
  y1 = y1 + (dy * u1);
  clrscr();
  printf("THE REQUIRED CLIPPED LINE IS:");
  rectangle(xmin, ymax, xmax, ymin);
  line(x1, y1, x2, y2);
  getch();
 }
}
*** PLEASE checkout the Best deals from for top sites like Amazon, Flipkart etc ***