Wednesday, 25 February 2015

Scan Line Algorithm

#include<stdio.h>
#include<graphics.h>

int main()
{
 int gd=DETECT, gm,op,n,a[10][3];
 int  cnt,temp,i,j,k;
 float ymax,ymin,inter_x[10],yscan;
 int x[10],y[10];
 float m[10],dx,dy;
 printf("Enter no of vertices");
 scanf("%d",&n);
 for(i=0;i<n;i++)
{
  printf("verticesof polygon is ");
  scanf("%d%d",&x[i],&y[i]);
}
x[n]=x[0];
y[n]=y[0];
initgraph(&gd,&gm,NULL);
setcolor(3);
for(i=0;i<n;i++)
{
line(x[i],y[i],x[i+1],y[i+1]);
}
ymax=0;
ymin=480;
 for(i=0;i<n;i++)
 {
   if(y[i]>ymax)
    ymax=y[i];
    if(y[i]<ymin)
    ymin=y[i];
 }
 for(i=0;i<n;i++)
 {
  dx=x[i+1]-x[i];
  dy=y[i+1]-y[i];
   if(dx==0)
   m[i]=0;
   else if(dy==0)
   m[i]=0;
   else
   m[i]=(float)dy/dx;
 }
 for(yscan=ymax;yscan>ymin;yscan--)
 {
    cnt=0;
    for(i=0;i<n;i++)
    {
     if(y[i]>yscan && y[i+1]<=yscan || y[i]<=yscan && y[i+1]>yscan)
     {
       if(m[i]==0)
          inter_x[cnt]=x[i];
       else
           inter_x[cnt]=x[i]+(yscan-y[i])/m[i];
       cnt++;
    }
   }
      for(i=0;i<cnt-1;i++)
      {
      for(j=0;j<cnt-1;j++)
      {
    if(inter_x[j]>inter_x[j+1])
    {
     temp=inter_x[j];
     inter_x[j]=inter_x[j+1];
     inter_x[j+1]=temp;
       }
      }
     }
     for(j=0;j<cnt-1;j=j+2)
     {
      setcolor(4);
      delay(100);
       if(j%4==0)
       line(inter_x[j]+1,yscan,inter_x[j+1]-1,yscan);
     }
 }
setcolor(3);
getch();
}

No comments:

Post a Comment