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++相关推荐

  1. EntityFramework Core映射关系详解

    前言 Hello,开始回归开始每周更新一到两篇博客,本节我们回归下EF Core基础,来讲述EF Core中到底是如何映射的,废话少说,我们开始. One-Many Relationship(一对多关 ...

  2. 人工智能数学基础:两个存在映射关系的随机变量的概率密度函数关系研究

    一.引言 在<数字图像处理>(<<数字图像处理>第三章学习总结感悟2-1:直方图均衡(Histogram Equalization)>)中有这样一段描述: 由基本概 ...

  3. [MyBatis]-resultMap结果映射集详解

    resultMap结果映射集详解 resultmap是mybatis中最复杂的元素之一,它描述如何从结果集中加载对象,主要作用是定义映射规则.级联的更新.定制类型转化器. resultmap构成元素 ...

  4. Hibernate配置文件与映射文件详解

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  5. Mybatis复习笔记3:映射文件详解

    映射文件详解 参数处理(#和$的区别) #{}:可以获取map中的值或者实体对象属性的值: ${}:可以获取map中的值或者实体对象属性的值: select * from person where i ...

  6. UML类图与类的关系详解

    UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...

  7. 好程序员前端教程之JavaScript闭包和匿名函数的关系详解...

    好程序员前端教程之JavaScript闭包和匿名函数的关系详解 本文讲的是关于JavaScript闭包和匿名函数两者之间的关系,从匿名函数概念到立即执行函数,最后到闭包.下面一起来看看文章分析,希望你 ...

  8. 文件的复制、移动、压缩等对SELinux属性关系详解

    文件的复制.移动.压缩等对SELinux属性关系详解 1.临时修改文件的类型属性 文件的类型属性不正确是常见的SELinux拒绝访问的主要原因 1)修改文件的SELinux属性: [root@loca ...

  9. Java中常见RuntimeException与其他异常表及Exception逻辑关系详解

    Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...

最新文章

  1. Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装
  2. linux 时钟同步 chrony 简介
  3. 手机版网页开发_华为低调发布鸿蒙OS手机开发者Beta版,明年覆盖1亿台设备
  4. R语言观察日志(part12)--关于.Rprofile文件
  5. 0 重新学习Ubuntu -- 这一段没怎么学习
  6. linux如何全局搜索目录,Linux 全目录全文搜索
  7. Java学习笔记1.1.2 搭建Java开发环境 - 安装配置JDK
  8. 翁恺老师C语言学习笔记(十)指针_指针与数组
  9. From Apprentice To Artisan 翻译 17
  10. rad linux下安装mysql_Rad Hat Enterprise Linux 5.5上安装Oracle 11g R2
  11. 游戏玩家的图形显示设置指南(11)(The Gamer's Graphics Display Settings Guide)
  12. Go语言:交换两个整型变量的值
  13. Java 小记 — RabbitMQ 的实践与思考
  14. UE4简单水体使用记录
  15. 百度网盘破解版下不了大文件
  16. 【NLP】哈工大车万翔教授 -- 自然语言处理NLPer的核心竞争力是什么?19页ppt
  17. 如何使用Clonezilla克隆Windows硬盘
  18. python空气质量指数计算_Python的学习笔记案例8--空气质量指数计算5.0
  19. [Unity]Optimize Your Mobile Game Performance中文版
  20. 在vc中使用xtremetoolkit界面库-----安装及环境配置

热门文章

  1. Spring注解解释
  2. Win11系统怎么禁止OneDrive开机自启操作分享
  3. 工业相机和镜头的参数理解、选型、打光方案总结(附参考案例)
  4. 封闭性问题、开放性问题、挑战性问题
  5. android平板f100,2C2A 100W大功率,SlimQ F100氮化镓充电器登陆众筹平台
  6. MAX7221数码管驱动的多种探索
  7. 2020.10.23--AI--小熊制作、太极制作、微信图标制作
  8. YOJ3394-挑剔的H胖胖
  9. 四大跨境电商平台对比:亚马逊、ebay、速卖通、wish
  10. 搭建Open edX经验总结