将两数间距离转换至0-100刻度的公式需求
需求对应的缩放公式解决方案
首先,咱们先把核心需求拆解清楚:要基于两个变量的绝对距离做区间缩放,满足三个关键点:
- 当两个变量距离为0时,输出值固定为100
- 只要两个变量的绝对距离相同,不管正负方向差异,输出结果完全一致
- 最终输出被限制在0-100的区间内
场景1:有明确的最大参考距离(距离到该值时输出0)
如果你能确定一个「距离上限」D_max——也就是当两个变量的距离等于D_max时,输出值为0,那可以用线性缩放公式:
结果 = 100 * (1 - |A - B| / D_max)
参数说明:
A是第一个变量,B是第二个变量|A - B|用来计算两个变量的绝对距离(保证正负场景结果一致)D_max是你定义的临界距离,当|A-B|=D_max时结果为0
验证你的示例:
假设你希望距离500时输出值为X,那把D_max=500代入公式:
- 第一个场景:
|400-900|=500→ 结果=100*(1-500/500)=0,此时X=0 - 第二个场景:
|-400-100|=500→ 结果同样是0,完全符合你的要求 - 当距离为0时:
|A-B|=0→ 结果=100*(1-0)=100,满足核心条件
如果担心实际距离超过D_max导致结果为负数,可以给公式加个下限限制:
结果 = max(0, 100 * (1 - |A - B| / D_max))
场景2:没有明确的最大距离(结果渐近趋近于0)
如果没有固定的距离上限,希望距离越大结果越接近0(但永远不会等于0),可以用反比例缩放的变体:
结果 = 100 / (1 + |A - B| / K)
参数说明:
K是自定义的调节参数,用来控制结果下降的速率:K越大,结果随距离增大的下降速度越慢- 当距离为0时,结果=100/(1+0)=100,满足要求
- 相同绝对距离的场景,结果完全一致
比如K=500时,距离500的结果是50;K=250时,距离500的结果是33.33,你可以根据实际需求调整K的值。
内容的提问来源于stack exchange,提问作者Plrrp G
相关产品推荐
相关产品推荐

