Javascript 如何规范化从[a,b]到[c,d]的范围,其中a映射到d,b映射到c
例如,我有一个从[0,15]到[0,1]的距离范围,我需要将它们映射到[0,1]元素的不透明度 距离为0的元素不透明度应为1,距离为15的元素不透明度应为0 我尝试了法线最小最大归一化,它将0映射到0,15映射到1,但我需要相反的结果 我用于常规标准化的公式:Javascript 如何规范化从[a,b]到[c,d]的范围,其中a映射到d,b映射到c,javascript,angularjs,algorithm,Javascript,Angularjs,Algorithm,例如,我有一个从[0,15]到[0,1]的距离范围,我需要将它们映射到[0,1]元素的不透明度 距离为0的元素不透明度应为1,距离为15的元素不透明度应为0 我尝试了法线最小最大归一化,它将0映射到0,15映射到1,但我需要相反的结果 我用于常规标准化的公式: ((currentValue-min)/(max-min))*(newMax-newMin)+newMin((currentValue-min)/(max-min))*(newMin-newMax)+newMax) 你应该做这个把戏 公式
((currentValue-min)/(max-min))*(newMax-newMin)+newMin
((currentValue-min)/(max-min))*(newMin-newMax)+newMax)
你应该做这个把戏 公式应为:
newMax - ((currentValue - min)/ (max - min)) * (newMax - newMin)
((currentValue-min)/(max-min))*(newMax-newMin)
计算从根到当前值的新距离,由于新范围的根位于newMax
,因此,我们得到了公式。您应该先.reverse()
范围数组。从这里开始,它只是匹配两个数组的边界。可能是这样:
var distances = [0,1,2,3,4,5,6];
var opacity = {min: 0, max: 1};
var result = [];
distances.reverse().forEach(function(distance){
var step = opacity.min+((opacity.max-opacity.min)/distances.length);
var item = {
distance: distance,
opacity: opacity.min+distance*step
}
result.push(item);
});
console.log(result);
你用什么语言?纯CSS无法处理算法。我投票将此问题作为离题题结束,因为这是一个数学问题。@KarolyHorvath是的,这是一个数学问题,但它可能在javascript/angular中有特定的实现,或者有人可能在编程中遇到过类似的问题。我还添加了公式,这几乎正是我在Javascript中使用的代码。你的公式有什么问题?@PhamTrung它将0映射到0,15映射到1,我正在寻找15映射到0,0映射到1