#include #include #include #include "vis_assign.h" int use_goodness = 0; void use_goodness_values(int ug) { use_goodness = ug; } void vis_assign(float lats[], float lons[], int goodness[], float dist[], int ns) { float * xx, * yy, * zz; float * gfac; unsigned char * assigned; int i; float dtr,lt,ln; float dx,dy,dz; float d,dd; int na; int mingood,maxgood; int minspec,maxspec; float xmin,xmax,ymin,ymax,zmin,zmax; float floor; float w1,w2; int npass; int best; float disfac,bestdf,bestdis; if (ns<=0) return; /* printf("ns %d\n",ns); */ xx = (float *) malloc(17*ns); yy = xx+ns; zz = yy+ns; gfac = zz+ns; assigned = (unsigned char *)(gfac+ns); /* printf("memory allocated %d\n",xx); */ dtr = atan(1.0)/45.0; mingood = 0x6FFFFFFF; maxgood = -0x6FFFFFFF; minspec = 0x7FFFFFFF; maxspec = 0x6FFFFFFF; xmin = ymin = zmin = 1.0; xmax = ymax = zmax = -1.0; na = 0; for (i=0; i0 && goodness[i]<=22222) { assigned[i] = 1; dist[i] = 2*sin(goodness[i]/12740.0); goodness[i] += 0x6FFFFFFF; na++; } else { assigned[i] = 0; dist[i] = 2.0; }/*endif*/ if (xx[i]>xmax) xmax = xx[i]; if (xx[i]ymax) ymax = yy[i]; if (yy[i]zmax) zmax = zz[i]; if (zz[i]=0x6FFFFFFF) { if (goodness[i]>maxspec) maxspec = goodness[i]; if (goodness[i]maxgood) maxgood = goodness[i]; if (goodness[i]floor) floor = dy; if (dz>floor) floor = dz; floor /= 4; npass = 0; for (i=0; i=0x6FFFFFFF) { if (maxspec==minspec) w1 = 0.5; else w1 = (goodness[i]-minspec)/(maxspec-minspec); w2 = 1.0-w1; gfac[i] = exp(log(4.0)*w1+log(2.0)*w2); } else { if (maxgood==mingood) w1 = 0.5; else w1 = (goodness[i]-mingood)/(maxgood-mingood); w2 = 1.0-w1; gfac[i] = exp(log(1.0)*w1+log(0.1)*w2); }/*endif*/ for (npass=0; nadd || -dx>dd) continue; dy = yy[i]-yy[best]; if (dy>dd || -dy>dd) continue; dz = zz[i]-zz[best]; if (dz>dd || -dz>dd) continue; d = sqrt(dx*dx+dy*dy+dz*dz); if (ddd || -dx>dd) continue; dy = yy[i]-yy[best]; if (dy>dd || -dy>dd) continue; dz = zz[i]-zz[best]; if (dz>dd || -dz>dd) continue; d = sqrt(dx*dx+dy*dy+dz*dz); if (d