/* Data structures for geometric elements and functions that operate on them. Defines the TESSEROID, SPHERE, and PRISM structures. */ #include #include #include #include #include "constants.h" #include "logger.h" #include "geometry.h" /* Split a tesseroid into 8. */ void split_tess(MAG_TESSEROID tess, MAG_TESSEROID *split) { double dlon = 0.5*(tess.e - tess.w), dlat = 0.5*(tess.n - tess.s), dr = 0.5*(tess.r2 - tess.r1), ws[2], ss[2], r1s[2]; int i, j, k, t = 0; ws[0] = tess.w; ws[1] = tess.w + dlon; ss[0] = tess.s; ss[1] = tess.s + dlat; r1s[0] = tess.r1; r1s[1] = tess.r1 + dr; for(k = 0; k < 2; k++) { for(j = 0; j < 2; j++) { for(i = 0; i < 2; i++) { split[t].w = ws[i]; split[t].e = ws[i] + dlon; split[t].s = ss[j]; split[t].n = ss[j] + dlat; split[t].r1 = r1s[k]; split[t].r2 = r1s[k] + dr; split[t].density = tess.density; t++; } } } }