LINE CLIPPING
CODING:
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<stdlib.h>
void clip(float,float,float);
int i,j=0,n;
float rx1,rx2,ry1,ry2,x1[8],y1[8];
void main()
{
int gd=DETECT,gm;
float x[8],y[8],m;
clrscr();
initgraph(&gd,&gm," ");
printf("\n\t\t**********Line Clipping Algorithm**********");
printf("\nEnter the co-ordinates of rectangle");
scanf("%f%f%f%f",&rx1,&ry1,&rx2,&ry2);
printf("\nEnter the no of points");
scanf("%d",&n);
printf("\n co-ordinate");
for(i=0;i<n;i++)
{
scanf("%f%f",&x[i],&y[i]);
}
cleardevice();
outtextxy(70,20,"Before Clipping");
outtextxy(70,480,"Press any key");
rectangle(rx1,ry1,rx2,ry2);
for(i=0;i<n;i++)
{
line(x[i],y[i],x[i+1],y[i+1]);
}
line(x[i],y[i],x[0],y[0]);
getch();
cleardevice();
for(i=0;i<n-1;i++)
{
m=(y[i+1]-y[i])/(x[i+1]-x[i]);
clip(x[i],y[i],m);
clip(x[i+1],y[i+1],m);
}
m=(y[i]-y[0])/(x[i]-x[0]);
clip(x[i],y[i],m);
clip(x[0],y[0],m);
outtextxy(70,20,"After Clipping");
outtextxy(70,470,"Press any key");
rectangle(rx1,ry1,rx2,ry2);
setcolor(RED);
for(i=0;i<j-1;i++)
{
line(x1[i],y1[i],x1[i+1],y1[i+1]);
}
line(x1[i],y1[i],x1[0],y1[0]);
getch();
}
void clip(float e,float f,float m)
{
while(e<rx1||e>rx2||f<ry1||f>ry2)
{
if(e<rx1)
{
f+=m*(rx1-e);
e=rx1;
}
if(e>rx2)
{
f+=m*(rx2-e);
e=rx2;
}
if(f<ry1)
{
e+=(ry1-f)/m;
f=ry1;
}
if(f>ry2)
{
e+=(ry2-f)/m;
f=ry2;
}
break;
}
x1[j]=e;
y1[j]=f;
j++;
}
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<stdlib.h>
void clip(float,float,float);
int i,j=0,n;
float rx1,rx2,ry1,ry2,x1[8],y1[8];
void main()
{
int gd=DETECT,gm;
float x[8],y[8],m;
clrscr();
initgraph(&gd,&gm," ");
printf("\n\t\t**********Line Clipping Algorithm**********");
printf("\nEnter the co-ordinates of rectangle");
scanf("%f%f%f%f",&rx1,&ry1,&rx2,&ry2);
printf("\nEnter the no of points");
scanf("%d",&n);
printf("\n co-ordinate");
for(i=0;i<n;i++)
{
scanf("%f%f",&x[i],&y[i]);
}
cleardevice();
outtextxy(70,20,"Before Clipping");
outtextxy(70,480,"Press any key");
rectangle(rx1,ry1,rx2,ry2);
for(i=0;i<n;i++)
{
line(x[i],y[i],x[i+1],y[i+1]);
}
line(x[i],y[i],x[0],y[0]);
getch();
cleardevice();
for(i=0;i<n-1;i++)
{
m=(y[i+1]-y[i])/(x[i+1]-x[i]);
clip(x[i],y[i],m);
clip(x[i+1],y[i+1],m);
}
m=(y[i]-y[0])/(x[i]-x[0]);
clip(x[i],y[i],m);
clip(x[0],y[0],m);
outtextxy(70,20,"After Clipping");
outtextxy(70,470,"Press any key");
rectangle(rx1,ry1,rx2,ry2);
setcolor(RED);
for(i=0;i<j-1;i++)
{
line(x1[i],y1[i],x1[i+1],y1[i+1]);
}
line(x1[i],y1[i],x1[0],y1[0]);
getch();
}
void clip(float e,float f,float m)
{
while(e<rx1||e>rx2||f<ry1||f>ry2)
{
if(e<rx1)
{
f+=m*(rx1-e);
e=rx1;
}
if(e>rx2)
{
f+=m*(rx2-e);
e=rx2;
}
if(f<ry1)
{
e+=(ry1-f)/m;
f=ry1;
}
if(f>ry2)
{
e+=(ry2-f)/m;
f=ry2;
}
break;
}
x1[j]=e;
y1[j]=f;
j++;
}
Comments
Post a Comment