Math 将数字从一个范围转换到另一个范围
示例范围1(最小值和最大值): 范围1中的示例数字:Math 将数字从一个范围转换到另一个范围,math,language-agnostic,range,Math,Language Agnostic,Range,示例范围1(最小值和最大值): 范围1中的示例数字: [42, 59.4, 78.18, 120.43, 416] 示例范围2: [10 .. 140] 如何将数字的值从范围1转换为第二个范围内的值42应等于新范围内10到11之间的某个值 我正在使用PHP,但这更像是一道数学题 我知道如何将它们与第二个范围对齐: $diff = $range[0] - $numbers[0]; foreach($numbers as $i => $number){ $numbers[$i] = $
[42, 59.4, 78.18, 120.43, 416]
示例范围2:
[10 .. 140]
如何将数字的值从范围1转换为第二个范围内的值<代码>42应等于新范围内10到11之间的某个值
我正在使用PHP,但这更像是一道数学题
我知道如何将它们与第二个范围对齐:
$diff = $range[0] - $numbers[0];
foreach($numbers as $i => $number){
$numbers[$i] = $number + $diff;
}
但就是这样:(你的意思是这样的,它可以线性缩放值以适应新的范围吗
var transformRange = (value, r1, r2) => {
var scale = (r2.max - r2.min) / (r1.max - r1.min)
return (value - r1.min) * scale;
}
示例用法:
transformRange(100, {max: 150, min: 50}, {max: 1, min: 0}); => 0.5
可以使用此函数(python)将一个范围转换为另一个范围 一般来说,您希望重新设置范围的基础(确保它们都从零开始),然后找到如何拉伸第一个范围以获得第二个范围
40
将第一个范围转换为[0-440]
,通过减去10
将第二个范围转换为[0-130]
。这样做是为了得到从零开始的间隔,这很容易缩放[0-440]
中的任何值转换为[0-130]
中的相应值,您需要将其与130/440
相乘。您可以将其想象为将第一个间隔缩小为[0-1]
间隔,方法是用440
除以,然后将其拉伸为[0-130]
相乘间隔[0-440]
到[0-130]
了,这意味着要从[40-440]
到[10-140]
你首先需要通过减去40
乘以130/440
然后再加上10
>>> transform(40)
10.0
>>> transform(42)
10.590909090909092
>>> transform(220)
63.181818181818187
>>> transform(480)
140.0
最佳答案。易于理解。似乎需要将输出范围最小值添加到结果中?即:
返回(值-r1.min)*缩放+r2.min
。请参阅
def transfrom(x):
return (x - 40)*(130/440.0) + 10
>>> transform(40)
10.0
>>> transform(42)
10.590909090909092
>>> transform(220)
63.181818181818187
>>> transform(480)
140.0