| 1 | 
greg | 
2.1 | 
/* | 
| 2 | 
  | 
  | 
**      Author: Christian Reetz ([email protected]) | 
| 3 | 
  | 
  | 
*/ | 
| 4 | 
  | 
  | 
#ifndef __G3SPHERE_H | 
| 5 | 
  | 
  | 
#define __G3SPHERE_H | 
| 6 | 
  | 
  | 
#ifndef M_PI | 
| 7 | 
  | 
  | 
    #define M_PI       3.14159265358979323846 | 
| 8 | 
  | 
  | 
#endif | 
| 9 | 
  | 
  | 
 | 
| 10 | 
  | 
  | 
#ifdef __cplusplus | 
| 11 | 
  | 
  | 
extern "C" { | 
| 12 | 
  | 
  | 
#endif | 
| 13 | 
  | 
  | 
 | 
| 14 | 
  | 
  | 
#include "gbasic.h" | 
| 15 | 
  | 
  | 
#include "g3vector.h" | 
| 16 | 
  | 
  | 
 | 
| 17 | 
  | 
  | 
 | 
| 18 | 
  | 
  | 
/** | 
| 19 | 
  | 
  | 
***     Functions for doing some geometry on spheres. | 
| 20 | 
  | 
  | 
***     Subscripts in names indicates: "cc" cartesian coords,"sph" spherical | 
| 21 | 
  | 
  | 
*** coords, normalization on cart. coords ist done, "chk" checks are made. | 
| 22 | 
  | 
  | 
***     If the function name contains no subsript  | 
| 23 | 
  | 
  | 
***     no checks are made and normalized cartesian coordinates are expected. | 
| 24 | 
  | 
  | 
*** All functions allow for "res" to be equivalent to some other param. | 
| 25 | 
  | 
  | 
*/ | 
| 26 | 
  | 
  | 
 | 
| 27 | 
  | 
  | 
#define G3S_RAD         0 | 
| 28 | 
  | 
  | 
#define G3S_THETA       1 | 
| 29 | 
  | 
  | 
#define G3S_PHI         2 | 
| 30 | 
  | 
  | 
#define G3S_MY          1 | 
| 31 | 
  | 
  | 
#define G3S_MZ          2 | 
| 32 | 
  | 
  | 
 | 
| 33 | 
  | 
  | 
#define G3S_RESCOPY(res,co) int copy = 0; \ | 
| 34 | 
  | 
  | 
                                                        if (res == co) { \ | 
| 35 | 
  | 
  | 
                                                                res = g3v_create(); \ | 
| 36 | 
  | 
  | 
                                                                copy = 1; \ | 
| 37 | 
  | 
  | 
                                                        }                | 
| 38 | 
  | 
  | 
#define G3S_RESFREE(res,co)     if (copy) { \ | 
| 39 | 
  | 
  | 
                                                                g3v_copy(co,res); \ | 
| 40 | 
  | 
  | 
                                                                g3v_free(res); \ | 
| 41 | 
  | 
  | 
                                                                res = co; \ | 
| 42 | 
  | 
  | 
                                                        } | 
| 43 | 
  | 
  | 
 | 
| 44 | 
  | 
  | 
/* | 
| 45 | 
  | 
  | 
** Some transformation between coord. systems: | 
| 46 | 
  | 
  | 
** cc: Cartesian  | 
| 47 | 
  | 
  | 
** sph: spherical | 
| 48 | 
  | 
  | 
** mtr: metrical spherical | 
| 49 | 
  | 
  | 
** tr: transversal spherical | 
| 50 | 
  | 
  | 
*/ | 
| 51 | 
  | 
  | 
g3Vec   g3s_sphtocc(g3Vec res,g3Vec sph); | 
| 52 | 
  | 
  | 
g3Vec   g3s_cctosph(g3Vec res,g3Vec cc); | 
| 53 | 
  | 
  | 
g3Vec   g3s_sphwrap(g3Vec sph); | 
| 54 | 
  | 
  | 
g3Vec   g3s_trwrap(g3Vec tr); | 
| 55 | 
  | 
  | 
g3Vec   g3s_mtrtocc(g3Vec res,g3Vec mtr); | 
| 56 | 
  | 
  | 
g3Vec   g3s_cctomtr(g3Vec res,g3Vec cc); | 
| 57 | 
  | 
  | 
g3Vec   g3s_trtocc(g3Vec res,g3Vec mtr); | 
| 58 | 
  | 
  | 
g3Vec   g3s_cctotr(g3Vec res,g3Vec cc); | 
| 59 | 
  | 
  | 
g3Vec   g3s_sphtotr(g3Vec res,g3Vec sph); | 
| 60 | 
  | 
  | 
g3Vec   g3s_trtosph(g3Vec res,g3Vec tr); | 
| 61 | 
  | 
  | 
g3Float g3s_dist(const g3Vec cc1,const g3Vec cc2); | 
| 62 | 
  | 
  | 
g3Float g3s_dist_norm(const g3Vec cc1,const g3Vec cc2); | 
| 63 | 
  | 
  | 
 | 
| 64 | 
  | 
  | 
 | 
| 65 | 
  | 
  | 
#ifdef __cplusplus | 
| 66 | 
  | 
  | 
} | 
| 67 | 
  | 
  | 
#endif | 
| 68 | 
  | 
  | 
 | 
| 69 | 
  | 
  | 
#endif |