[size=6]我的程序时用边标志算法做的,但是没办法解决局部极值点的问题。。。。高手帮帮忙啊。。。[/size]
#include<graphics.h>
#define bcolor 6
#define newcolor 3

void DDA();  
void polygon();
void byedge();
main()
{
  int n,i;
  int color=6;     
  int p[20][2];
  int gdriver=DETECT, gmode; 
  initgraph(&gdriver, &gmode, "c:\tc\tc");
  printf("input the total sides of the polygon");
  scanf("%d",&n);
  printf("input each points of the polygon\n");
  for (i=0;i<n;i++) 
  {  printf("%d point",i+1);
     scanf("%d,%d",&p[i][0],&p[i][1]);  
     printf("\n");
   }
  polygon(n, p);
  getch();
  byedge(n,p);
  getch();    
}

void polygon(int n, int p[][2])
{
   int i;
   int color=6;
   if (n<=2) return;
   for (i=0;i<n-1;i++) 
   DDA(p[i][0], p[i][1], p[i+1][0], p[i+1][1],color);
   DDA(p[0][0], p[0][1], p[i][0], p[i][1],color);
}

void DDA(int x0, int y0,int x1,int y1,int color)
{
   int t;    
   float dy,dx,x,y,k;
   if(x0>x1)
  {    
      t=x0;x0=x1;x1=t;
      t=y0;y0=y1;y1=t;    
   }
   dx=x1-x0;    dy=y1-y0;
   if(dx!=0)
  { 
      k=dy/dx;
      if(k<=1 && k>=-1)
       {    
          y=y0;
      for(t=x0;t<=x1;t++)
              {
          putpixel(t,(int)(y+0.5),color);
          y+=k;    
               }    
        }
        
      else 
       {    
           x=x0;
       for(t=y0;t<=y1;t++)    
              {
        putpixel((int)(x+0.5),t,color);
        x+=1/k;        
               }        
        }
   }
   else 
     {    
         for(t=x0;t<=y1;t++)
    putpixel(x0,t,color);    
      }
 }


void byedge(int n, int p[][2])
{
  int x,y,i,xmin,xmax,ymin,ymax,flag;     
  int vt[10]={0};
  xmin=xmax=p[0][0];
  for (i=1;i<n;i++) 
  {  
      if ( p[i][0]>xmax ) xmax=p[i][0];
      if ( p[i][0]<xmin ) xmin=p[i][0]; 
  }    
      ymin=ymax=p[0][1];
      for (i=1;i<n;i++) 
        {  
            if ( p[i][1]>ymax ) ymax=p[i][1];
            if ( p[i][1]<ymin ) ymin=p[i][1]; 
         }
      for (i=1;i<n-1;i++)  
          if ( (p[i][1]-p[i+1][1])*(p[i][1]-p[i-1][1]) <0 ) 
               vt[i]=1;
          if ( (p[0][1]-p[1][1])*(p[0][1]-p[n-1][1]) <0 ) 
               vt[i]=1;
          if ( (p[n-1][1]-p[0][1])*(p[n-1][1]-p[n-2][1]) <0 ) 
               vt[i]=1;  

     for(y = ymin;y <= ymax;y++)
         {
             flag=-1;
         for(x=xmin;x<=xmax;x++)
                 {
                    if(getpixel(x,y)==bcolor) flag=-flag;
                if(flag==1) 
                    putpixel(x,y, newcolor);    
                  }
         }
}