Sunday, March 3, 2019

Assignment 6: Write C++ program to fill polygon using scan line algorithm.




#include<iostream>
#include<graphics.h>
#include<math.h>
using namespace std;

class scan
{
    public:
    int x[20],y[20],k;
    float slope[20],x_int[20];
    void polygon(int n);
};

void scan::polygon(int n)
{
    int i,p;
    float dx,dy;
    int temp;
    x[n]=x[0];
    y[n]=y[0];
    for(i=0;i<n;i++)
    {
        line(x[i],y[i],x[i+1],y[i+1]);
    }
    
    for(i=0;i<n;i++)
    {
        dy=y[i+1]-y[i];
        dx=x[i+1]-x[i];
        if(dy==0)
        slope[i]=1;
        else if(dx==0) 
        slope[i]=0;
        else 
        slope[i]=dx/dy;
    }
    
    for(p=0;p<480;p++)
    {
        k=0;
        for(i=0;i<n;i++)
        {
            if(((y[i]<=p)&&(y[i+1]>p))||((y[i]>p)&&(y[i+1]<=p)))
              {
                  x_int[k]=x[i]+slope[i]*(p-y[i]);
                  k++;
              }
          }
          
          for(int j=0;j<k-1;j++)
          {
              for(i=0;i<k-1;i++)
              {
                  if(x_int[i]>x_int[i+1])
                  {
                      temp=x_int[i];
                      x_int[i]=x_int[i+1];
                      x_int[i+1]=temp;
                  }
              }
          }
         
        
          for(i=0;i<k;i=i+2)
          {
               setcolor(YELLOW);
              line(x_int[i],p,x_int[i+1],p);
              delay(10);
              
          }
          
          
      }
  }
  
  
  int main()
  {
      int n,i;
      scan p;
      cout<<"Enter edge : \t";
      cin>>n;
      cout<<"\n\nEnter Coordinates : \t";
      for(i=0;i<n;i++)
      {
          cin>>p.x[i]>>p.y[i];
      }
      int gd,gm;
      gd=DETECT;
      initgraph(&gd,&gm,NULL);
      p.polygon(n);
      getch();
        closegraph();
        return 0;
 }

No comments:

Post a Comment