我正在寻找一个函数或算法,对于指定范围内的值,它将返回一个相同范围内的值但是基于值的切入/除法。很难解释 - 一些预期的输出在这个空壳上
function choppedRange(value, min, max, chops) {
// value - a value in range min to max
// chops - integer defining how many "subranges" or "chops" to return values from
...
}
// Map (linear conversion) input value in range oldMin -> oldMax
// to a value in range newMin -> newMax
function remap(oldValue, oldMin, oldMax, newMin, newMax) {
return (((oldValue - oldMin) * (newMax - newMin)) / (oldMax - oldMin)) + newMin;
}
0.35
...)0.35
到0,25
的值(蓝色)0.5
在min
和max
参数的范围内,例如0
至1
:remap(0.35, 0.25, 0.5, 0, 1)
0.3999...
希望你能看出我的意思。
正如您所看到的,我已完成重新映射 - 但我无法确定remap
输入的“chop”值 - 就像这样:
remap(input_value, chop_min, chop_max, min, max)
我希望根据chop_min
chop_max
参数找到chops
和choppedRange
function choppedRange(value, min, max, chops) {
// Figure out chop_min and chop_max
...
return remap(value, chop_min, chop_max, min, max)
}
答案 0 :(得分:1)
我最终得到了这个实现
function choppedRange(value, min, max, chops) {
// value - a value in range min to max
// chops - integer defining how many "subranges" or "chops" to return values from
var chopMin = min, chopMax = max, chopValue = max / chops, i, c
for (i = 1; i <= chops; i++) {
c = chopValue * i
if (c < value)
chopMin = c
if (c >= value) {
chopMax = c
break;
}
}
return (((value - chopMin) * (max - min)) / (chopMax - chopMin)) + min
}
var r = choppedRange(0, 0, 1, 4)
console.log('Result',r)
r = choppedRange(0.35, 0, 1, 4)
console.log('Result',r)
r = choppedRange(0.5, 0, 1, 4)
console.log('Result',r)
r = choppedRange(0.6, 0, 1, 4)
console.log('Result',r)
r = choppedRange(1, 0, 1, 4)
console.log('Result',r)
&#13;