请大神帮忙指出算法是否存在问题,为啥我运行出不来结果,谢谢!
程序代码:#include <stdio.h>
#define pi 3.1415
size_t foo( const double src[][2], size_t src_len, double dst[][2] )
{
if( src_len == 0 )
return 0;
size_t dst_len = 1;
dst[0][0]=src[0][0], dst[0][1]=src[0][1];
for( size_t i=1; i!=src_len; ++i )
{
const double delta0 = src[i][0] - dst[dst_len-1][0];
const double delta1 = src[i][1] - dst[dst_len-1][1];
size_t cnt = 1;
for( double tmp=delta0; tmp>0.1; tmp/=2, cnt*=2 );
for( size_t j=0; j!=cnt; ++j )
{
dst[dst_len][0] = src[i][0] - ( (cnt-1-j)*1.0/cnt )*delta0;
dst[dst_len][1] = src[i][1] - ( (cnt-1-j)*1.0/cnt )*delta1;
++dst_len;
}
}
return dst_len;
}
int main()
{
double a[][2]={{0,100},{1,150}};
size_t H1=0,H2=0;
size_t i,j,k,m,l,h,p,n;
double L1=0,L2=0,D=0.617,e=0.012;
double b[100000][2],Q[100000][2];
size_t b_len = foo( a, sizeof(a)/sizeof(*a), b );
for(i=0; i!=b_len; ++i )
{
for(j=i;j!=b_len;j+=H1)
{
if(b[j+1][1]-b[j][1]>0)
{
for(k=j;(k!=b_len)&&(b[k+1][1]-b[k][1]>0);k++)
L1+=b[k][0]-b[j][0];
H1=k-j;
}
else
{
for(m=j;(m!=b_len)&&(b[m+1][1]-b[j][1]<=0);m++);
H1=m-j;
}
}
for(l=i;l!=0;l-=H2)
{
if(b[l-1][1]-b[l][1]>0)
{
for(h=l;(h!=0)&&(b[h-1][1]-b[h][1]>0);h--);
L2+=b[l][0]-b[h][0];
H2=l-h;
}
else
{
for(p=l;(p!=0)&&(b[p-1][1]-b[l][1]<=0);p--);
H2=l-p;
}
}
Q[i][0]=b[i][0];
Q[i][1]=(L1+L2)*pi*(D-2*e)*(D-2*e)/4.0;
}
for(n=0; n!=b_len; ++n )
printf("%g\t%g\n",Q[n][0],Q[n][1]);
return 0;
}







