请大神帮忙指出算法是否存在问题,为啥我运行出不来结果,谢谢!
程序代码:
#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; }