/************************************************************************ * edit_poly_cm edits the data in a polygon * * * ************************************************************************/ /************************************************************************ * Creator: * * Date : * ************************************************************************/ /************************************************************************ * Modification History: * * Date : * * * ************************************************************************/ #include #include #include int pnpoly(int , double *, double *, double , double ); int main(int argc, char **argv) { double lat, lon; int idepth, pred, inside, nedit; int id, nrec, sigh, sigd, num,kp; double xp[100],yp[100]; FILE * fidp, * fi, *fo; if(argc < 2){ fprintf(stderr,"edit_poly_cm poly.xy in.cm out.cm \n"); exit (-1); } /* open and read the polygon file */ fidp = fopen(argv[1],"r"); kp=0; while(fscanf(fidp," %lf %lf",&xp[kp],&yp[kp]) != EOF) { kp = kp +1; } /* open the read and write data files */ fi = fopen(argv[2],"r"); fo = fopen(argv[3],"w"); /*read all the data */ nrec=0; nedit=0; while (fscanf(fi,"%d %lf %lf %d %d %d %d %d",&num,&lon,&lat,&idepth,&sigh,&sigd,&id,&pred) != EOF) { nrec++; inside = pnpoly(kp,xp,yp,lon,lat); /*if(inside == 1) printf("%lf %lf \n",lon,lat);*/ if (inside == 1 && sigd != 9999) { sigd=9999; nedit++; } fprintf(fo,"%d %.5f %.5f %d %d %d %d %d \n",num,lon,lat,idepth,sigh,sigd,id,pred); } fprintf(stdout,"number of points %d, number of points edited %d \n",nrec,nedit); } int pnpoly(int npol, double *xp, double *yp, double x, double y) { int i, j, c = 0; for (i = 0, j = npol-1; i < npol; j = i++) { if ((((yp[i] <= y) && (y < yp[j])) || ((yp[j] <= y) && (y < yp[i]))) && (x < (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i])) c = !c; } return c; }