我想将一些输入值缩放到某个输出范围。

输入或域10、20、40、30-总和100

输出范围不应低于16。所有输入的输出总和应为214

myScale --- d3线性刻度

var myScale = d3.scale.linear().domain([0, 100]).range([16,214]);

out1=myScale(10)
out2=myScale(20)
out3=myScale(40)
out4=myScale(30)


我希望out1 + out2 + out3 + out4始终等于214,且所有outs的最小值等于或大于16。

请让我知道如何写天平

最佳答案

由于minValue是16,并且正如qiu-deqing所说,它的添加次数是输入数量的多少倍,因此,我们应确保仅将其添加一次。

var minValue = 16,
    totalSum = 214,
    numberOfInputs = 4;

var maxValue = totalSum - ((numberOfInputs - 1)*minValue);

var myScale = d3.scale.linear().domain([0, 100]).range([minValue,maxValue]);


fiddle

10-05 18:06