Program to implement Sutherland-Hodgeman Polygon Clipping Algorithm

/*program to implement Sutherland-Hodgeman Polygon Clipping Algorithm*/

#include stdio.h
#include conio.h
#include graphics.h
#include math.h
#include dos.h

typedef struct coordinates
{
float x;
float y;
}pt;

int n;
pt d,p1,p2,p[20],pi1,pi2,pp[20];
void drawpolygon(pt p[],int n);
void left(pt p1,pt p[],pt pp[]);
void right(pt p1,pt p[],pt pp[]);
void top(pt p1,pt p[],pt pp[]);
void bottom(pt p1,pt p[],pt pp[]);

void main()
{
int i,j,gd,gm;
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"c:\\tc\\bgi");
printf("Enter the cordinates(left,top) of point 1\t");
scanf("%f %f",&p1.x,&p1.y);
printf("Enter the cordinates(right,bottom) of point 2\t");
scanf("%f %f",&p2.x,&p2.y);
printf("\nEnter the number of vertex\t");
scanf("%d",&n);
for(i=0;i=p1.x)
{
if(p[i+1].x-p[i].x!=0)
{
pp[j].y=(p[i+1].y-p[i].y)/(p[i+1].x-p[i].x)*(p1.x-p[i].x+p[i].y);
}
else
{
pp[j].y=p[i].y;
}
pp[j].x=p1.x;
j++;
pp[j].x=p[i+1].x;
pp[j].y=p[i+1].y;
j++;
}
if(p[i].x>p1.x && p[i+1].x>=p1.x)
{
pp[j].y=p[i+1].y;
pp[j].x=p[i+1].x;
j++;
}
if(p[i].x>p1.x && p[i+1].x<=p1.x) { if(p[i+1].x-p[i].x!=0) { pp[j].y=(p[i+1].y-p[i].y)/(p[i+1].x-p[i].x)*(p1.x-p[i].x)+p[i].y; } else { pp[j].y=p[i].y; } pp[j].x=p1.x; j++; } } for(i=0;ip2.x && p[i+1].x<=p2.x) { if(p[i+1].x-p[i].x!=0) { pp[j].y=(p[i+1].y-p[i].y)/(p[i+1].x-p[i].x)*(p2.x-p[i].x+p[i].y); } else { pp[j].y=p[i].y; } pp[j].x=p2.x; j++; pp[j].x=p[i+1].x; pp[j].y=p[i+1].y; j++; } if(p[i].x=p2.x)
{
if(p[i+1].x-p[i].x!=0)
{
pp[j].y=(p[i+1].y-p[i].y)/(p[i+1].x-p[i].x)*(p2.x-p[i].x)+p[i].y;
}
else
{
pp[j].y=p[i].y;
}
pp[j].x=p2.x;
j++;
}
}
for(i=0;i=p1.y)
{
if(p[i+1].y-p[i].y!=0)
{
pp[j].x=(p[i+1].x-p[i].x)/(p[i+1].y-p[i].y)*(p1.y-p[i].y+p[i].x);
}
else
{
pp[j].x=p[i].x;
}
pp[j].y=p1.y;
j++;
pp[j].x=p[i+1].x;
pp[j].y=p[i+1].y;
j++;
}
if(p[i].y>p1.y && p[i+1].y>=p1.y)
{
pp[j].y=p[i+1].y;
pp[j].x=p[i+1].x;
j++;
}
if(p[i].y>p1.y && p[i+1].y<=p1.y) { if(p[i+1].y-p[i].y!=0) { pp[j].x=(p[i+1].x-p[i].x)/(p[i+1].y-p[i].y)*(p1.y-p[i].y)+p[i].x; } else { pp[j].x=p[i].x; } pp[j].y=p1.y; j++; } } for(i=0;ip2.y && p[i+1].y<=p2.y) { if(p[i+1].y-p[i].y!=0) { pp[j].x=(p[i+1].x-p[i].x)/(p[i+1].y-p[i].y)*(p2.y-p[i].y+p[i].x); } else { pp[j].x=p[i].x; } pp[j].y=p2.y; j++; pp[j].x=p[i+1].x; pp[j].y=p[i+1].y; j++; } if(p[i].y=p2.y)
{
if(p[i+1].y-p[i].y!=0)
{
pp[j].x=(p[i+1].x-p[i].x)/(p[i+1].y-p[i].y)*(p2.y-p[i].y)+p[i].x;
}
else
{
pp[j].x=p[i].x;
}
pp[j].y=p2.y;
j++;
}
}
for(i=0;i
{
p[i].x=pp[i].x;
p[i].y=pp[i].y;
}
p[i].x=pp[0].x;
p[i].y=pp[0].y;
n=j;
}

void drawpolygon(pt x[20],int n)
{
int i;
for(i=0;i
{
line(x[i].x,x[i].y,x[i+1].x,x[i+1].y);
}
line(x[i].x,x[i].y,x[0].x,x[0].y);
}

No comments:

Post a Comment