/*****************************************************************************
-** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
-**
-** $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
+** FILE IDENTIFICATION
**
-** Revision 1.6 2000/05/02 20:00:25 kevin
-** *** empty log message ***
+** Name: kmath.h
+** Purpose: Header file containing definitions for numerical app
+** Programmer: Kevin Rosenberg
+** Date Started: Nov 84
**
-** Revision 1.5 2000/05/02 15:31:39 kevin
-** code cleaning
-**
-** Revision 1.4 2000/04/30 19:17:35 kevin
-** Set up include files for conditional INTERACTIVE_GRAPHICS
-**
-** Revision 1.3 2000/04/28 14:14:16 kevin
-** *** empty log message ***
+** This is part of the CTSim program
+** Copyright (C) 1983-2000 Kevin Rosenberg
**
+** $Id: kmath.h,v 1.12 2000/06/13 16:20:31 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
******************************************************************************/
-/******************************************************************************
- *
- * PURPOSE
- * Header file containing definitions for numerical app's
- * Date Started: Nov 84
- *
- *****************************************************************************/
#ifndef _H_kmath
#define _H_kmath
#include <stdio.h>
#include <math.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+#include <algo.h>
#define PI 3.14159265358979323846
#define HALFPI 1.57079632679489661923 /* PI divided by 2 */
#define DEG_TO_RAD(x) (x*(PI/180.))
#define RAD_TO_DEG(x) (x*(180./PI))
-
#define ASSUMEDZERO 1E-10
typedef double GRFMTX_2D[3][3];
typedef double GRFMTX_3D[4][4];
-/* clip.c */
+
+template<class T>
+inline T nearest (double x)
+{ return (x > 0 ? static_cast<T>(x+0.5) : static_cast<T>(x-0.5)); }
+
+template<class T>
+inline T clamp (T value, T upperBounds, T lowerBounds)
+{ return (value >= upperBounds ? upperBounds : (value <= lowerBounds ? lowerBounds : value )); }
+
+
+/* clip.cpp */
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);
int clip_sector(double *x1, double *y1, double *x2, double *y2, const double u, const double v);
int clip_circle(double *x1, double *y1, double *x2, double *y2, const double cx, const double cy, const double radius, double t1, double t2);
int clip_triangle(double *x1, double *y1, double *x2, double *y2, const double u, const double v, const int clip_xaxis);
-/* lnearest.c */
-long int lnearest(double x);
-
-/* minmax.c */
-double fmax(const double a, const double b);
-void minmax_dvector(const double array[], const int pts, double *xmin, double *xmax);
-
-/* norm_ang.c */
+/* norm_ang.cpp */
double norm_ang(double theta);
-/* simpson.c */
-double simpson(const double xmin, const double xmax, const double *y, const int np);
-
-/* xform.c */
+/* xform.cpp */
void indent_mtx2(GRFMTX_2D m);
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 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 */
+/* simpson.cpp */
+double simpson(const double xmin, const double xmax, const double *y, const int np);
+
+/* minmax.cpp */
+void minmax_dvector(const double array[], const int pts, double *xmin, double *xmax);
+
#endif