#define VORONOI_NSITES 9 Point circ_center(delaunay_site_t *a, delaunay_site_t *b, delaunay_site_t *c) { Point ctr; double px[3], py[3]; double dx[3], dy[3], mx[3], my[3], q[3]; double det[3], rx[3], ry[3]; double swx, swy, sw; int i, j; px[0] = ((double) a->p.c[0]); py[0] = ((double) a->p.c[1]); px[1] = ((double) b->p.c[0]); py[1] = ((double) b->p.c[1]); px[2] = ((double) c->p.c[0]); py[2] = ((double) c->p.c[1]); for (i=0; i<3; i++) { j = (i==2 ? 0 : i+1); dx[i] = px[j] - px[i]; dy[i] = py[j] - py[i]; mx[i] = (px[j] + px[i])/2.0; my[i] = (py[j] + py[i])/2.0; q[i] = dx[i]*mx[i] + dy[i]*my[i]; } swx = 0.0; swy = 0.0; sw = 0.0; for (i=0; i<3; i++) { j = (i==2 ? 0 : i+1); det[i] = dx[i]*dy[j] - dx[j]*dy[i]; rx[i] = q[i]*dy[j] - q[j]*dy[i]; ry[i] = dx[i]*q[j] - dx[j]*q[i]; swx += det[i] * rx[i]; swy += det[i] * ry[i]; sw += det[i] * det[i]; /* fprintf(stderr, "circ_center: xc = %f yc = %f det = %f\n", rx[i]/det[i], ry[i]/det[i], det[i] ); */ } fprintf(stderr, "\n"); ctr.c[0] = swx/sw; ctr.c[1] = swy/sw; return (ctr); } sites[0] = (site_struct){-0.750, +0.575}; sites[1] = (site_struct){-0.050, +0.525}; sites[2] = (site_struct){+0.700, +0.750}; sites[3] = (site_struct){-0.650, -0.075}; sites[4] = (site_struct){+0.075, +0.000}; sites[5] = (site_struct){+0.525, +0.175}; sites[6] = (site_struct){-0.450, -0.375}; sites[7] = (site_struct){+0.575, -0.425}; sites[8] = (site_struct){+0.225, -0.725}; affirm(n == 9, "makesites: bad n"); sites[0] = (site_struct){-0.750, +0.575}; sites[1] = (site_struct){-0.050, +0.525}; sites[2] = (site_struct){+0.700, +0.750}; sites[3] = (site_struct){-0.650, -0.075}; sites[4] = (site_struct){+0.075, +0.000}; sites[5] = (site_struct){+0.525, +0.175}; sites[6] = (site_struct){-0.450, -0.375}; sites[7] = (site_struct){+0.575, -0.425}; sites[8] = (site_struct){+0.225, -0.725}; affirm(n == 9, "makesites: bad n"); sites[0] = (site_struct){-0.750, +0.575}; sites[1] = (site_struct){-0.050, +0.525}; sites[2] = (site_struct){+0.700, +0.750}; sites[3] = (site_struct){-0.650, -0.075}; sites[4] = (site_struct){+0.075, +0.000}; sites[5] = (site_struct){+0.525, +0.175}; sites[6] = (site_struct){-0.450, -0.375}; sites[7] = (site_struct){+0.575, -0.425}; sites[8] = (site_struct){+0.225, -0.725}; affirm(n == 9, "makesites: bad n"); void relnei_makesites (int n, site_struct sites[]) { sites[ 0] = (site_struct){-0.750, +0.575}; sites[ 1] = (site_struct){-0.050, +0.525}; sites[ 2] = (site_struct){+0.700, +0.750}; sites[ 3] = (site_struct){-0.650, -0.075}; sites[ 4] = (site_struct){+0.325, +0.000}; sites[ 5] = (site_struct){+0.525, +0.175}; sites[ 6] = (site_struct){-0.400, -0.450}; sites[ 7] = (site_struct){+0.575, -0.425}; sites[ 8] = (site_struct){+0.225, -0.725}; sites[ 9] = (site_struct){-0.325, +0.350}; sites[10] = (site_struct){+0.500, +0.510}; sites[11] = (site_struct){-0.250, -0.075}; affirm(n == 12, "makesites: bad n"); }