49 lines
1.1 KiB
C++
Executable File
49 lines
1.1 KiB
C++
Executable File
/*
|
|
Data structures for geometric elements and functions that operate on them.
|
|
Defines the TESSEROID, SPHERE, and PRISM structures.
|
|
*/
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <math.h>
|
|
#include <string.h>
|
|
#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++;
|
|
}
|
|
}
|
|
}
|
|
}
|