5.Line Clipping Program Using C Programming

#include<stdio.h>

#include<conio.h>

#include<graphics.h>

#include<math.h>


#define Round(val)((int)(val+.5))


int maxx, maxy, miny, minx;


void main() {

int gd = DETECT, gm;

void clipping(int xa, int ya, int xb, int y);

int xa, xb, ya, yb;

printf("Enter the window coordination");

scanf("%d%d%d%d", &minx, &maxy, &maxx, &miny);

printf("Enter the two and points for the line");

scanf("%d%d%d%d", &xa, &ya, &xb, &yb);


initgraph(&gd, &gm, "");


rectangle(minx, miny, maxx, maxy);

line(xa, ya, xb, yb);

getch();

closegraph();

}


void clipping(int xa, int ya, int xb, int yb) {


int Dx = xb - xa, Dy = yb - ya, steps, k;

int visible1 = 0, visible2 = 0;

float xin, yin, x = xa, y = ya;


if (abs(Dx) > abs(Dy))

steps = abs(Dx);

else

steps = abs(Dy);


xin = Dx / (float) steps;

yin = Dy / (float) steps;

putpixel(Round(x), Round(y), 2);


for (k = 0; k < steps; k++) {

x += xin;


y += yin;


if ((y > miny && y < maxx)) {

visible1 = 1;

putpixel(Round(x), Round(y), 2);

} else

visible2 = 1;

}


if (visible1 == 0)

outtextxy(20, 200, "complextely visible");


if (visible1 == 1 && visible2 == 1)

outtextxy(20, 20, "partialy visible");


if (visible1 == 1 && visible2 == 0)

outtextxy(20, 20, "completly visible");

}