tomwalters@116: /*! tomwalters@116: * \file tomwalters@116: * \brief Frequency scale for generating filter banks and their frequencies tomwalters@116: * tomwalters@116: * \author Willem van Engen tomwalters@116: * \date created 2006/09/28 tomwalters@116: * \version \$Id: Scale.cpp 459 2007-11-08 11:50:04Z tom $ tomwalters@116: */ tomwalters@116: /* (c) 2006, University of Cambridge, Medical Research Council tomwalters@116: * http://www.pdn.cam.ac.uk/groups/cnbh/aimmanual tomwalters@116: */ tom@118: #include "Support/Common.h" tom@118: #include "Modules/Output/Graphics/Scale/Scale.h" tom@118: #include "Modules/Output/Graphics/Scale/ScaleLinear.h" tom@118: #include "Modules/Output/Graphics/Scale/ScaleERB.h" tom@118: #include "Modules/Output/Graphics/Scale/ScaleLog.h" tom@118: #include "Modules/Output/Graphics/Scale/ScaleLogScaled.h" tomwalters@116: tom@119: namespace aimc { tom@119: tom@118: Scale *Scale::Create(ScaleType iType, tom@118: unsigned int min, tom@118: unsigned int max, tom@118: float density) { tomwalters@117: switch(iType) { tomwalters@117: case SCALE_LINEAR: tomwalters@117: return static_cast(new ScaleLinear(min, max, density)); tomwalters@117: case SCALE_ERB: tomwalters@117: return static_cast(new ScaleERB(min, max, density)); tomwalters@117: case SCALE_LOG: tomwalters@117: return static_cast(new ScaleLog(min, max, density)); tomwalters@117: case SCALE_LOGSCALED: tomwalters@117: return static_cast(new ScaleLogScaled(min, max, density)); tomwalters@117: default: tom@119: AIM_ASSERT(0); tomwalters@117: break; tomwalters@117: } tomwalters@117: // Unreachable code tom@119: AIM_ASSERT(0); tomwalters@117: return NULL; tomwalters@116: } tomwalters@116: tom@118: Scale *Scale::Create(ScaleType iType) { tomwalters@117: return Create(iType, 0, 0, 0); tomwalters@116: } tomwalters@116: tom@118: Scale *Scale::Clone() { tomwalters@117: Scale *pScale = Create(m_iType, m_iMin, m_iMax, m_fDensity); tom@118: AIM_ASSERT(pScale); tomwalters@117: pScale->m_fScaledCurHalfSum = m_fScaledCurHalfSum; tomwalters@117: pScale->m_fScaledCurDiff = m_fScaledCurDiff; tomwalters@117: return pScale; tomwalters@116: } tomwalters@116: tom@118: float Scale::FromLinearScaled(float fVal) { tomwalters@117: /*! This function returns tomwalters@117: * ( FromLinear(fVal) - (fMinScaled+fMaxScaled)/2 ) / (fMaxScaled-fMinScaled) tomwalters@117: */ tomwalters@117: float fValScaled = FromLinear(fVal); tomwalters@117: return (fValScaled - m_fScaledCurHalfSum) / m_fScaledCurDiff; tomwalters@116: } tom@118: tom@118: void Scale::FromLinearScaledExtrema(float fMin, float fMax) { tomwalters@117: float fMinScaled = FromLinear(fMin); tomwalters@117: float fMaxScaled = FromLinear(fMax); tomwalters@117: m_fScaledCurHalfSum = (fMinScaled+fMaxScaled)/2; tomwalters@117: m_fScaledCurDiff = fMaxScaled-fMinScaled; tomwalters@117: m_fMin = fMin; tomwalters@117: m_fMax = fMax; tomwalters@116: } tom@118: tom@118: void Scale::FromLinearScaledExtrema(Scale *pScale) { tom@119: AIM_ASSERT(pScale); tomwalters@117: FromLinearScaledExtrema(pScale->m_fMin, pScale->m_fMax); tomwalters@116: } tom@119: } // namespace aimc