Alex Pirciu
/
BFMC
a
Embed:
(wiki syntax)
Show/hide line numbers
converters.inl
00001 00002 00003 /** 00004 * @brief Construct a new CConverterPolynom<NOrd>::CConverterPolynom object 00005 * 00006 * @param f_coeff The list of the coeffience. 00007 */ 00008 template<uint8_t NOrd> 00009 CConverterPolynom<NOrd>::CConverterPolynom(std::array<float,NOrd+1> f_coeff) 00010 :m_coeff(f_coeff) 00011 { 00012 } 00013 00014 00015 /** 00016 * @brief Convert the input value. 00017 * 00018 */ 00019 template<uint8_t NOrd> 00020 float CConverterPolynom<NOrd>::operator()(float f_v){ 00021 float l_res = m_coeff[NOrd]; 00022 for (uint8_t i = 0;i<NOrd;++i){ 00023 l_res += std::pow(f_v, NOrd-i)*m_coeff[i]; 00024 } 00025 return l_res; 00026 } 00027 00028 00029 /** 00030 * @brief Construct a new CConverterSpline<NrBreak, NOrd>::CConverterSpline object 00031 * 00032 * @tparam NrBreak 00033 * @tparam NOrd 00034 * @param f_breaks The list of the break points. 00035 * @param f_splines The list of the polynomial function. 00036 */ 00037 template <uint8_t NrBreak, uint8_t NOrd> 00038 CConverterSpline<NrBreak, NOrd>::CConverterSpline(CConverterSpline<NrBreak, NOrd>::CBreakContainerType f_breaks,CConverterSpline<NrBreak, NOrd>::CSplineContainerType f_splines) 00039 :m_breaks(f_breaks) 00040 ,m_splines(f_splines) 00041 { 00042 } 00043 00044 /** 00045 * @brief Convert the input value. 00046 * 00047 */ 00048 template <uint8_t NrBreak, uint8_t NOrd> 00049 float CConverterSpline<NrBreak, NOrd>::operator()(float f_value){ 00050 typename CConverterSpline<NrBreak, NOrd>::CBreakContainerType::iterator it_breaks0=NULL,it_breaks1=NULL; 00051 typename CConverterSpline<NrBreak, NOrd>::CSplineContainerType::iterator it_spline = m_splines.begin(); 00052 for (it_breaks1 = m_breaks.begin();it_breaks1 != m_breaks.end();){ 00053 if((it_breaks0==NULL || (it_breaks0!=NULL && (*it_breaks0)<f_value)) && f_value<=(*it_breaks1)){ 00054 break; 00055 } 00056 it_breaks0 = it_breaks1; 00057 ++it_breaks1; 00058 ++it_spline; 00059 } 00060 return this->splineValue(*it_spline, f_value); 00061 } 00062 00063 /** 00064 * @brief Convert the given value, by using the given polynom. 00065 * 00066 * @param f_coeff The coeffiences of the polynom 00067 * @param f_value The input value. 00068 */ 00069 template <uint8_t NrBreak, uint8_t NOrd> 00070 float CConverterSpline<NrBreak, NOrd>::splineValue( CCoeffContainerType f_coeff,float f_value){ 00071 float l_res = f_coeff[NOrd]; 00072 for (uint8_t i = 0;i<NOrd;++i) 00073 { 00074 l_res+=std::pow(f_value,NOrd-i)*f_coeff[i]; 00075 } 00076 return l_res; 00077 }
Generated on Tue Jul 12 2022 22:40:50 by 1.7.2