Last edited on 2003-08-26 10:22:01 by stolfi c = floor((xPlot.lo + 0.1)/o->grid) * o->grid; while (c < xPlot.hi - 0.1) { epswr_coord_line(eps, HOR, c); c += o->grid; } c = floor((yPlot.lo + 0.1)/o->grid) * o->grid; while (c < yPlot.hi - 0.1) { epswr_coord_line(eps, VER, c); c += o->grid; } /* Compute street-distance balls and define coverage counts: */ if (o->nBall > 0) { float d[m->nv]; float c[2 * m->ne]; quad_arc_t e[m->nv]; int r[m->nv]; int nr; st_map_init_distances(m, d, e, c); for (i = 0; i < o->nBall; i++) { /* Find vertex nearest to specified center: */ int iu = st_map_nearest_vertex(m, o->ctrBall[i]); float dMax = (float) o->rBall[i]; /* Install a TUP there: */ vntups[iu]++; /* Compute street distances from that vertex: */ fprintf(stderr, "computing distances: dMax = %.1f center = vertex[%d] = (%.1f, %.1f)...", dMax, iu, m->vd[iu]->p.c[0], m->vd[iu]->p.c[1] ); st_map_compute_distances(m, iu, dMax, r, &nr, d, e, c); fprintf(stderr, " done.\n"); /* Tally vertex coverage: */ for (iv = 0; iv < m->nv; iv++) { if (d[iv] <= dMax) { vcover[iv]++; } } /* Tally edge coverage: */ for (ie = 0; ie < m->ne; ie++) { int ia0 = 2*ie, ia1 = 2*ie+1; if ((c[ia0] <= dMax) || (c[ia1] <= dMax)) { ecover[ie]++; } } /* Reset distances for next {st_map_compute_distances}: */ st_map_reset_distances(m, r, nr, d, e, c); } } void get_next_arg_string(char **varp, int32_t *argnp, int32_t argc, char **argv, char *usage) /* Stores the next command line argument (as a string) into {*varp} */ { int32_t argn = *argnp; if (argn+1 >= argc) { argparser_error(pp, ("missing arg value", argv[argn]); } (*varp) = argv[argn+1]; (*argnp) = argn+1; } void get_next_arg_double(double *varp, int32_t *argnp, int32_t argc, char **argv, char *usage) /* Stores the next command line argument (as a double) into {*varp} */ { int32_t argn = *argnp; char *end; if (argn+1 >= argc) { argparser_error(pp, ("missing arg value", argv[argn]); } (*varp) = strtod(argv[argn+1], &end); if ((*end) != '\0') { argparser_error(pp, ("invalid numeric argument", argv[argn+1]); } (*argnp) = argn+1; } void arg_error(char *msg, char *arg, char *pname, char *usage) /* Prints {msg}, {arg}, the {usage} message, and exits. Handy while parsing the command line arguments. */ { fprintf(stderr, "%s %s\n", msg, arg); fprintf(stderr, "usage: %s %s\n", pname, usage); exit(1); }