/*********************************************************************** mosaic_util.h This header file provide some utilities routine that will be used in many tools. contact: Zhi.Liang@noaa.gov ***********************************************************************/ #ifndef MOSAIC_UTIL_H_ #define MOSAIC_UTIL_H_ #define min(a,b) (ab ? a:b) #define SMALL_VALUE ( 1.e-10 ) void error_handler(const char *msg); int nearest_index(double value, const double *array, int ia); int lon_fix(double *x, double *y, int n_in, double tlon); double minval_double(int size, const double *data); double maxval_double(int size, const double *data); double avgval_double(int size, const double *data); void latlon2xyz(int size, const double *lon, const double *lat, double *x, double *y, double *z); void xyz2latlon(int size, const double *x, const double *y, const double *z, double *lon, double *lat); double box_area(double ll_lon, double ll_lat, double ur_lon, double ur_lat); double poly_area(const double lon[], const double lat[], int n); double poly_area_no_adjust(const double x[], const double y[], int n); int fix_lon(double lon[], double lat[], int n, double tlon); void tokenize(const char * const string, const char *tokens, unsigned int varlen, unsigned int maxvar, char * pstring, unsigned int * const nstr); double great_circle_distance(double *p1, double *p2); double spherical_excess_area(const double* p_ll, const double* p_ul, const double* p_lr, const double* p_ur, double radius); void vect_cross(const double *p1, const double *p2, double *e ); double spherical_angle(const double *v1, const double *v2, const double *v3); void normalize_vect(double *e); void unit_vect_latlon(int size, const double *lon, const double *lat, double *vlon, double *vlat); #endif