【发布时间】:2017-06-08 22:55:13
【问题描述】:
我有一个范围 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 长度。但是当我到达那个范围时,我得到了一个“陷阱”的值,并且无法返回。 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,因为 aX = a1,因此始终为 b0 + (b1 - b0) => b1)。
我怎样才能避免这种情况?
【问题讨论】: