X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=include%2Fkmath.h;h=ed8de01fa6be368efaa356c652e06e6577a3697d;hb=a62ba7c54d39fcf1e469c8df169018fa60ae7c3b;hp=2a8145422162a0e1cf584a5ff29ed474872a91e5;hpb=2f71224f911d19adaa941d7553a9462a1aef7293;p=ctsim.git diff --git a/include/kmath.h b/include/kmath.h index 2a81454..ed8de01 100644 --- a/include/kmath.h +++ b/include/kmath.h @@ -2,8 +2,20 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: kmath.h,v 1.7 2000/05/04 18:16:34 kevin Exp $ +** $Id: kmath.h,v 1.11 2000/06/09 01:35:33 kevin Exp $ ** $Log: kmath.h,v $ +** Revision 1.11 2000/06/09 01:35:33 kevin +** Convert MPI structure to C++ class +** +** Revision 1.10 2000/06/07 00:59:38 kevin +** added imagefiles +** +** Revision 1.9 2000/05/08 20:00:48 kevin +** ANSI C changes +** +** Revision 1.8 2000/05/07 12:46:19 kevin +** made c++ compatible +** ** Revision 1.7 2000/05/04 18:16:34 kevin ** renamed filter definitions ** @@ -47,6 +59,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + #define PI 3.14159265358979323846 #define HALFPI 1.57079632679489661923 /* PI divided by 2 */ #define QUARTPI 0.78539816339744830962 /* PI divided by 4 */ @@ -65,110 +81,9 @@ #define ASSUMEDZERO 1E-10 -/* codes for C data types */ - -#define DT_CHAR 1 -#define DT_INT 2 -#define DT_LONG 3 -#define DT_FLOAT 4 -#define DT_DOUBLE 5 -#define DT_STRING 6 - -typedef char *CMTX_1D; -typedef CMTX_1D *CMTX_2D; -typedef CMTX_2D *CMTX_3D; - -typedef int *IMTX_1D; -typedef IMTX_1D *IMTX_2D; -typedef IMTX_2D *IMTX_3D; - -typedef float *FMTX_1D; -typedef FMTX_1D *FMTX_2D; -typedef FMTX_2D *FMTX_3D; - -typedef double *DMTX_1D; -typedef DMTX_1D *DMTX_2D; -typedef DMTX_2D *DMTX_3D; - typedef double GRFMTX_2D[3][3]; typedef double GRFMTX_3D[4][4]; -union elem_val_un { /* holds an element value */ - char c; - int i; - long int l; - float f; - double d; -}; - -typedef union elem_val_un MTX_ELEM_VAL; - - -union elem_ptr_un { /* holds a pointer to a 1D vector of any type */ - char *c; - int *i; - long int *l; - float *f; - double *d; -}; - -typedef union elem_ptr_un MTX_1D; -typedef MTX_1D *MTX_2D; -typedef MTX_2D *MTX_3D; - -union mtx_val_ptr_un { /* pointer to matrix values */ - MTX_1D m1; - MTX_2D m2; - MTX_3D m3; -}; - -typedef union mtx_val_ptr_un MTX_PTR; - -struct matrix_st { - unsigned int order; /* order, or dimension, of matrix */ - unsigned int elemtype; /* element type */ - unsigned int elemsize; /* size of element in bytes */ - unsigned int nx, ny, nz; /* size of matrix in each dimension */ - MTX_PTR val; /* pointer to matrix values */ -}; - -typedef struct matrix_st MTX; -typedef struct matrix_st *MTXP; - -/* DEFINITION IDENTIFICATION - * - * Definitions to access a matrix element from an matrix - * - -#define me1(mtx,x)\ - (mtx->elemtype == DT_FLOAT ? mtx->val.m1.f[x] :\ - (mtx->elemtype == DT_DOUBLE ? mtx->val.m1.d[x] :\ - (mtx->elemtype == DT_INT ? mtx->val.m1.i[x] :\ - (mtx->elemtype == DT_LONG ? mtx->val.m1.l[x] :\ - (mtx->elemtype == DT_CHAR ? mtx->val.m1.c[x] :\ - 0\ - ))))) - -#define me2(mtx,x,y)\ - (mtx->elemtype == DT_FLOAT ? mtx->val.m2[x].f[y] :\ - (mtx->elemtype == DT_DOUBLE ? mtx->val.m2[x].d[y] :\ - (mtx->elemtype == DT_INT ? mtx->val.m2[x].i[y] :\ - (mtx->elemtype == DT_LONG ? mtx->val.m2[x].l[y] :\ - (mtx->elemtype == DT_CHAR ? mtx->val.m2[x].c[y] :\ - 0\ - ))))) - - -#define me3(mtx,x,y,z)\ - (mtx->elemtype == DT_FLOAT ? mtx->val.m3[x][y].f[z] :\ - (mtx->elemtype == DT_DOUBLE ? mtx->val.m3[x][y].d[z] :\ - (mtx->elemtype == DT_INT ? mtx->val.m3[x][y].i[z] :\ - (mtx->elemtype == DT_LONG ? mtx->val.m3[x][y].l[z] :\ - (mtx->elemtype == DT_CHAR ? mtx->val.m3[x][y].c[z] :\ - 0\ - ))))) -*/ - /* clip.c */ int clip_rect(double *x1, double *y1, double *x2, double *y2, const double rect[4]); int clip_segment(double *x1, double *y1, double *x2, double *y2, const double u, const double v); @@ -183,25 +98,6 @@ long int lnearest(double x); double fmax(const double a, const double b); void minmax_dvector(const double array[], const int pts, double *xmin, double *xmax); -/* mtx_disp.c */ -void mtx_show(const MTX *mtx); -void mtx_prt(const MTX *mtx, FILE *fp); -int mtx_prt_elem(const MTX *mtx, FILE *fp, unsigned int x, unsigned int y, unsigned int z); - -/* mtx_elem.c */ -int mtx_get_elem(const MTX *mtx, MTX_ELEM_VAL *me, const int x, const int y, const int z); -int mtx_put_elem(MTX *mtx, const MTX_ELEM_VAL *me, unsigned int x, unsigned int y, unsigned int z); - -/* mtx_inp.c */ -int mtx_inp_elem(const char *prompt, MTX_ELEM_VAL *mev, const int dtype); - -/* mtx_main.c */ -MTX *mtx_init(const unsigned int order, const unsigned int elem_type, const unsigned int nx, const unsigned int ny, const unsigned int nz); -MTX *mtx_clr(MTX *mtx); -int mtx_free(MTX *mtx); -int mtx_elem_size(const int dt); -int mtx_check(const MTX *mtx, const char *func_name); - /* norm_ang.c */ double norm_ang(double theta); @@ -214,12 +110,13 @@ void xlat_mtx2(GRFMTX_2D m, const double x, const double y); void scale_mtx2(GRFMTX_2D m, const double sx, const double sy); void rot_mtx2(GRFMTX_2D m, const double theta); void mult_mtx2(GRFMTX_2D m1, GRFMTX_2D m2, GRFMTX_2D result); -void xform_mtx2(GRFMTX_2D const m, double *x, double *y); +void xform_mtx2(GRFMTX_2D m, double *x, double *y); void rotate2d(double x[], double y[], int pts, double angle); void xlat2d(double x[], double y[], int pts, double xoffset, double yoffset); void scale2d(double x[], double y[], int pts, double xfact, double yfact); - - +#ifdef __cplusplus +} +#endif /* __cplusplus */ #endif