我有一个范围 a
(起始范围)和范围 b
(目标范围),我需要将值 aX
从范围 a
缩放到范围 b
. 代码是基本的线性插值:
double LinearInterpolation(double a0, double a1, double b0, double b1, double aX) {
return b0 + (b1 - b0) * (aX - a0) / (a1 - a0);
}
事实是:范围b可以是1.0到1.0的0长度 . 但是当我达到那个范围时,我得到的值是"trap",并且无法返回 . Here's一个例子:
int main ()
{
double a0 = 0.4;
double a1 = 1.0;
double b0 = 0.6;
double b1 = 1.0;
double aX = 0.58;
aX = LinearInterpolation(a0, a1, b0, b1, aX);
std::cout << aX << std::endl;
b0 = 1.0;
aX = LinearInterpolation(a0, a1, b0, b1, aX);
std::cout << aX << std::endl;
b0 = 0.6;
aX = LinearInterpolation(a0, a1, b0, b1, aX);
std::cout << aX << std::endl;
}
在 b0
为0之前,它会正确缩放 aX
值 . 当我到达 b0 = b1 = 1.0
时,我不能回去( aX
总是1.0,因为 X = a1
,因此总是 b0 + (b1 - b0) => b1
) .
我怎么能避免这个?
1 回答
不存储实际值,而是存储范围内的相对位置:
用你的例子:
您也可以在原始代码中设置
aX
.