00001 /***************************************************************************** 00002 * Software License Agreement (BSD License) 00003 * 00004 * Copyright (c) 2009, the Trustees of Indiana University 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions are met: 00009 * * Redistributions of source code must retain the above copyright 00010 * notice, this list of conditions and the following disclaimer. 00011 * * Redistributions in binary form must reproduce the above copyright 00012 * notice, this list of conditions and the following disclaimer in the 00013 * documentation and/or other materials provided with the distribution. 00014 * * Neither the name of Indiana University nor the 00015 * names of its contributors may be used to endorse or promote products 00016 * derived from this software without specific prior written permission. 00017 00018 * THIS SOFTWARE IS PROVIDED BY THE TRUSTEES OF INDIANA UNIVERSITY ''AS IS'' 00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00021 * ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES OF INDIANA UNIVERSITY BE 00022 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 00028 * THE POSSIBILITY OF SUCH DAMAGE. 00029 * 00030 ***************************************************************************/ 00031 #ifndef PARABOLIC_RAMP_MATH_H 00032 #define PARABOLIC_RAMP_MATH_H 00033 00034 #include <math.h> 00035 #include <stdlib.h> 00036 #include <vector> 00037 00038 namespace ParabolicRamp { 00039 00040 typedef double Real; 00041 typedef std::vector<double> Vector; 00042 00043 //can replace this with your favorite representation/tests of infinity 00044 const static Real Inf = 1e300; 00045 inline bool IsInf(Real x) { return x==Inf; } 00046 inline bool IsFinite(Real x) { return fabs(x)<Inf; } 00047 00048 inline Real Sqr(Real x) { return x*x; } 00049 inline Real Sqrt(Real x) { return sqrt(x); } 00050 inline Real Abs(Real x) { return fabs(x); } 00051 inline Real Sign(Real x) { return (x>0 ? 1 : (x<0 ? -1 : 0)); } 00052 inline Real Min(Real x,Real y) { return (x<y?x:y); } 00053 inline Real Max(Real x,Real y) { return (x>y?x:y); } 00054 inline bool FuzzyZero(Real x,Real tol) { return Abs(x)<=tol; } 00055 inline bool FuzzyEquals(Real x,Real y,Real tol) { return Abs(x-y)<=tol; } 00056 inline void Swap(Real& x,Real& y) { Real temp=x; x=y; y=temp; } 00057 00058 // Returns a random number in [0,1) 00059 inline Real Rand() { return Real(rand())/Real(RAND_MAX); } 00060 00061 } //namespace ParabolicRamp 00062 00063 #endif