Javascript 根据大小计算不透明度值

Javascript 根据大小计算不透明度值,javascript,math,Javascript,Math,我试图根据对象的大小反向计算不透明度。基本上,它越大,就越透明 对象大小的计算如下所示: var baseSize = 60; var sVariance = 4; var outputA = []; function blah() { for (i = 0; i < 5; i++) { this.newSize = Math.ceil(baseSize - (Math.random() * sVariance)); outputA[i] = th

我试图根据对象的大小反向计算不透明度。基本上,它越大,就越透明

对象大小的计算如下所示:

var baseSize = 60;
var sVariance = 4;
var outputA = [];

function blah() {
    for (i = 0; i < 5; i++) {
        this.newSize = Math.ceil(baseSize - (Math.random() * sVariance));
        outputA[i] = this.newSize;
    }
    document.writeln("Size = "+outputA);
}

blah();​
var baseSize=60;
var变异=4;
变量输出=[];
函数blah(){
对于(i=0;i<5;i++){
this.newSize=Math.ceil(baseSize-(Math.random()*sVariance));
outputA[i]=this.newSize;
}
document.writeln(“Size=“+outputA”);
}
诸如此类;​
…我希望能够计算大小范围之间的不透明度强度。例如,如果生成的5个大小为:60,59,58,57,59,我希望相应的不透明度值为:.25、.5、.75,1、.5


如果已经涵盖了类似的内容,我很抱歉,但是如果您能提供任何帮助,我们将不胜感激。

听起来您希望对数据进行规范化,以便最大值为1,最小值为某个分数。这将有助于定义你想要的分数(例如,总是0.25,1/#的值)。如何规范化数据取决于该选择

考虑用列表中的最小值减去所有值,或用最大值除以所有值,或两者兼而有之。

函数getSizes(baseSize,sVariance){
function getSizes(baseSize, sVariance) {
    var sizes = [];
    for (i = 0; i < 5; i++) {
        sizes[i] = Math.ceil(baseSize - (Math.random() * sVariance));
    }
    return sizes;
}

function calculateOpacityValues(baseSize, sVariance) {
    var min = 0.25, max = 1,
        step = 0.75 / sVariance, i,
        opacityValues = {};
    for (i = 0; i <= sVariance; i++) {
        opacityValues[baseSize - i] = min + step * i;
    }
    return opacityValues;
}

function getOpacities(sizes, opacityValues) {
    // create a map of opacities
    // and your expected values
    var opacities = [];
    sizes.forEach(function(value, index) {
        opacities[index] = opacityValues[value];
    });
    return opacities;
}

var baseSize = 60, sVariance = 3, 
    sizes = getSizes(baseSize, sVariance);
console.log(sizes);
// use the map to get the opacity
console.log(getOpacities(sizes, calculateOpacityValues(baseSize, sVariance)));​
变量大小=[]; 对于(i=0;i<5;i++){ size[i]=Math.ceil(baseSize-(Math.random()*sVariance)); } 返回大小; } 函数CalculatePocityValues(baseSize、sVariance){ 最小值为0.25,最大值为1, 阶跃=0.75/s变化,i, 不透明值={};
对于(i=0;i这是我将使用的函数。您可以看到在函数中转换值的逻辑。还有一个示例

请注意,
$.map
函数是一个jQuery函数,可以非常方便地转换数组项。如果不使用jQuery,可以将其替换为for循环

函数getOpacityArray(sizeArray,最大值,范围){ return$.map(sizerray,函数(n,i){ 返回(最大n)/范围; }); }
因此,在您的示例中,您可以在计算大小数组后获得不透明度数组,如下所示:

var baseSize=60,
变量=4,
outputA=[],
不透明=[];
函数blah(){
对于(i=0;i<5;i++){
this.newSize=Math.ceil(baseSize-(Math.random()*sVariance));
outputA[i]=this.newSize;
}
document.writeln(“Size=“+outputA”);
opacityA=getOpacityArray(输出、基尺寸、变量);
}
诸如此类;

很抱歉,我没有澄清,但baseSize和sVariance是用户设置的变量。