X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=include%2Fkmath.h;h=e4c577b928a6b76f2329daba594f2da9f07705cc;hb=007a78a5e3a043cbc7e2777ab033b81b8acbbe71;hp=5599327d2c285de22af7b1745f3965edf8b86fbd;hpb=031437896d0dc6cac70c16e5604b10f5aa4d0767;p=ctsim.git diff --git a/include/kmath.h b/include/kmath.h index 5599327..e4c577b 100644 --- a/include/kmath.h +++ b/include/kmath.h @@ -9,7 +9,7 @@ ** 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 $ +** $Id: kmath.h,v 1.16 2000/06/19 15:48:23 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 @@ -30,7 +30,6 @@ #include #include -#include #define PI 3.14159265358979323846 #define HALFPI 1.57079632679489661923 /* PI divided by 2 */ @@ -44,50 +43,70 @@ #define F_EPSILON 1.0E-6 #define D_EPSILON 1.0E-10 -#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]; +inline double +convertDegreesToRadians (double x) +{ return (x * (PI/180.)); } + +inline double +convertRadiansToDegrees (double x) +{ return (x*(180./PI)); } template inline T nearest (double x) { return (x > 0 ? static_cast(x+0.5) : static_cast(x-0.5)); } template -inline T clamp (T value, T upperBounds, T lowerBounds) +inline T clamp (T value, T lowerBounds, T upperBounds) { return (value >= upperBounds ? upperBounds : (value <= lowerBounds ? lowerBounds : value )); } +template +inline T lineLength (T x1, T y1, T x2, T y2) +{ return static_cast( sqrt ((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)) ); } + +template +inline void minmax_array (const T* array, const int n, T& min, T& max) +{ + max = min = array[0]; + + for (int i = 1; i < n; i++) + if (array[i] < min) + min = array[i]; + else if (array[i] > max) + max = array[i]; +} + + +////////////////////////////////////////////////////////////// +// FUNTION DECLARATIONS +////////////////////////////////////////////////////////////// -/* 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); +// 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); -/* norm_ang.cpp */ -double norm_ang(double theta); +// norm_ang.cpp +double norm_ang (double theta); -/* xform.cpp */ +// 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 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 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); -/* 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); - +// simpson.cpp +double integrateSimpson (const double xmin, const double xmax, const double *y, const int np); #endif