matlab_helpers.h
Go to the documentation of this file.
00001 //=================================================================================================
00002 // Copyright (c) 2012, Johannes Meyer, TU Darmstadt
00003 // All rights reserved.
00004 
00005 // Redistribution and use in source and binary forms, with or without
00006 // modification, are permitted provided that the following conditions are met:
00007 //     * Redistributions of source code must retain the above copyright
00008 //       notice, this list of conditions and the following disclaimer.
00009 //     * Redistributions in binary form must reproduce the above copyright
00010 //       notice, this list of conditions and the following disclaimer in the
00011 //       documentation and/or other materials provided with the distribution.
00012 //     * Neither the name of the Flight Systems and Automatic Control group,
00013 //       TU Darmstadt, nor the names of its contributors may be used to
00014 //       endorse or promote products derived from this software without
00015 //       specific prior written permission.
00016 
00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00018 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00019 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00020 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027 //=================================================================================================
00028 
00029 #ifndef HECTOR_QUADROTOR_MODEL_MATLAB_HELPERS_H
00030 #define HECTOR_QUADROTOR_MODEL_MATLAB_HELPERS_H
00031 
00032 #include <limits>
00033 #include <cmath>
00034 
00035 typedef double real_T;
00036 typedef uint32_t int32_T;
00037 typedef bool boolean_T;
00038 
00039 static const real_T rtInf = std::numeric_limits<real_T>::infinity();
00040 static inline boolean_T rtIsInf(real_T value)
00041 {
00042   return std::isinf(value);
00043 }
00044 
00045 static const real_T rtNaN = std::numeric_limits<real_T>::quiet_NaN();
00046 static inline boolean_T rtIsNaN(real_T value)
00047 {
00048   return std::isnan(value);
00049 }
00050 
00051 static real_T rt_powd_snf(real_T u0, real_T u1)
00052 {
00053   real_T y;
00054   real_T d0;
00055   real_T d1;
00056   if (rtIsNaN(u0) || rtIsNaN(u1)) {
00057     y = rtNaN;
00058   } else {
00059     d0 = fabs(u0);
00060     d1 = fabs(u1);
00061     if (rtIsInf(u1)) {
00062       if (d0 == 1.0) {
00063         y = rtNaN;
00064       } else if (d0 > 1.0) {
00065         if (u1 > 0.0) {
00066           y = rtInf;
00067         } else {
00068           y = 0.0;
00069         }
00070       } else if (u1 > 0.0) {
00071         y = 0.0;
00072       } else {
00073         y = rtInf;
00074       }
00075     } else if (d1 == 0.0) {
00076       y = 1.0;
00077     } else if (d1 == 1.0) {
00078       if (u1 > 0.0) {
00079         y = u0;
00080       } else {
00081         y = 1.0 / u0;
00082       }
00083     } else if (u1 == 2.0) {
00084       y = u0 * u0;
00085     } else if ((u1 == 0.5) && (u0 >= 0.0)) {
00086       y = sqrt(u0);
00087     } else if ((u0 < 0.0) && (u1 > floor(u1))) {
00088       y = rtNaN;
00089     } else {
00090       y = pow(u0, u1);
00091     }
00092   }
00093 
00094   return y;
00095 }
00096 
00097 #endif // HECTOR_QUADROTOR_MODEL_MATLAB_HELPERS_H


hector_quadrotor_model
Author(s): Johannes Meyer , Alexander Sendobry
autogenerated on Sun Jul 10 2016 04:50:01