#include #include #define rep(i,n) for(i=0;i1e-14){ c1 = (a*2+b)/3.0; c2 = (a+b*2)/3.0; d1 = t1*c1*distv(k,k+1); nx=(1.0-c1) * x[k] + c1 * x[k+1]; ny=(1.0-c1) * y[k] + c1 * y[k+1]; d1 += t2*dist(ex-nx,ey-ny); d2 = t1*c2*distv(k,k+1); nx=(1.0-c1) * x[k] + c2 * x[k+1]; ny=(1.0-c2) * y[k] + c2 * y[k+1]; d2 += t2*dist(ex-nx,ey-ny); if(d11e-14){ c1 = (a*2+b)/3.0; c2 = (a+b*2)/3.0; d1 = t1*c1*distv(k,(k+nm)%n); nx=(1.0-c1) * x[k] + c1 * x[(k+nm)%n]; ny=(1.0-c1) * y[k] + c1 * y[(k+nm)%n]; d1 += t2*dist(ex-nx,ey-ny); d2 = t1*c2*distv(k,(k+nm)%n); nx=(1.0-c1) * x[k] + c2 * x[(k+nm)%n]; ny=(1.0-c2) * y[k] + c2 * y[(k+nm)%n]; d2 += t2*dist(ex-nx,ey-ny); if(d11e-14){ c1 = (a*2+b)/3.0; c2 = (a+b*2)/3.0; nx = (1-c1)*x[k2] + c1*x[k3]; ny = (1-c1)*y[k2] + c1*y[k3]; d1 = dist(bx-nx,by-ny) * t2; d1+= dist(x[k3]-nx,y[k3]-ny) * t1; nx = (1-c2)*x[k2] + c2*x[k3]; ny = (1-c2)*y[k2] + c2*y[k3]; d2 = dist(bx-nx,by-ny) * t2; d2+= dist(x[k3]-nx,y[k3]-ny) * t1; if(d11e-14){ c1 = (a*2+b)/3.0; c2 = (a+b*2)/3.0; nx = (1-c1)*x[k2] + c1*x[k1]; ny = (1-c1)*y[k2] + c1*y[k1]; d1 = dist(bx-nx,by-ny) * t2; d1+= dist(x[k2]-nx,y[k2]-ny) * t1; nx = (1-c2)*x[k2] + c2*x[k1]; ny = (1-c2)*y[k2] + c2*y[k1]; d2 = dist(bx-nx,by-ny) * t2; d2+= dist(x[k2]-nx,y[k2]-ny) * t1; if(d1 a) d[i][j] = a; } rep(k,m) rep(i,m) rep(j,m){ if(d[i][j] > d[i][k] + d[k][j]) d[i][j] = d[i][k]+d[k][j]; } //printf("dist 0 2 = %lf\n",d[0][2]); //rep(i,m) REP(j,m-1,m) printf("dist %d %d = %lf\n",i,j,d[i][j]); printf("%.15lf\n",d[m-2][m-1]); } }