两个区间映射关系详解/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++的主要内容,如果未能解决你的问题,请参考以下文章