主题:高手帮忙改下我的程序。。。。。谢谢
[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);
}
}
}
#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);
}
}
}