两个区间映射关系详解/c++

Posted zhou753099943

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个区间映射关系详解/c++相关的知识,希望对你有一定的参考价值。

1、首先给一个两个区间映射的公式:

2、最近做项目中频繁用到区间转换,在网上找了许多例子都只有公式介绍,没有直接可用的代码,所以自己写一个给大家参考

3、直接给实现代码:

struct Interval

    Interval(): min(0.0), max(1.0)
    Interval(const double &_min, const double &_max)
        : min(_min), max(_max)
    double min;
    double max;
;

class CIntervalMap

    #define EPSILON 0.000001
public:
    CIntervalMap(const double &min = 0.0, const double &max = 1.0)
   
        m_dstInterval.min = min;
        m_dstInterval.max = max;
   

    void setSrcInterval(const double &min = 0.0, const double &max = 1.0)
   
        m_srcInterval.min = min;
        m_srcInterval.max = max;
   

    void setDstInterval(const double &min = 0.0, const double &max = 1.0)
   
        m_dstInterval.min = min;
        m_dstInterval.max = max;
   

    void getIntervalMapValue(const double& dstValue, double &srcValue)
   
        double den = (m_dstInterval.max - m_dstInterval.min);
        double d =  den > EPSILON ? (m_srcInterval.max - m_srcInterval.min) / den : 1.0;
        srcValue = (dstValue - m_dstInterval.min) * d + m_srcInterval.min;
   

private:
    Interval m_srcInterval;
    Interval m_dstInterval;
;

int main()

    //将区间[1~30]数据映射到区间[300~500]数据中
    Interval dst(1, 30);
    Interval src(300, 500);
    CIntervalMap inter(dst.min, dst.max);
    inter.setSrcInterval(src.min, src.max);
    for (int i = dst.min; i <= dst.max; ++i)
    
        double srcValue = 0.;
        inter.getIntervalMapValue(i, srcValue);
        std::cout<<"dstValue:"<<i<<" srcValue:"<<srcValue<<std::endl;
    
    return 0;

以上是关于两个区间映射关系详解/c++的主要内容,如果未能解决你的问题,请参考以下文章

mybatis--对象关系映射细节详解

hibernate 表关系映射详解之多对多

SSH:Hibernate框架(七种关联关系映射及配置详解)

Hibernate入门之one to one关系映射详解

hibernate hibernate一对一关系映射详解

hibernate 表关系映射详解之继承关系