我正在生成一个对象网格,每个对象都有3种颜色之一。假设我正在填充特定的网格单元。我知道在此单元格周围有例如1个颜色为0
的对象,1个颜色为1
和2个颜色为2
的对象,因此:
const surroundings = { 0: 1, 1: 1, 2: 2 }
现在,我想为正在使用的当前单元格分配颜色。我需要计算要使用的每种颜色的概率。为了使它看起来令人愉悦,我希望它与周围环境有所不同。因此,在上述情况下,概率可能是{ 0: 0.4, 1: 0.4, 2: 0.2 }
。
我确信概率论中已经实现了这种操作,但是我很难找到正确的条件。在示例中,我给出的概率可能不同,因为我不知道如何计算它们。但是对于颜色0
和1
,它们应该肯定相等,而对于颜色2
,它应该最小。
您可以获得reciprocal和和并返回它的一部分。
function getPro(array) {
var inv = array.map(v => 1 / v),
sum = inv.reduce((a, b) => a + b);
return inv.map(v => v / sum);
}
console.log(getPro([1, 1, 2]));
console.log(getPro([1, 1, 1]));
console.log(getPro([2, 4, 6]));
我将使用周围频率的总和来求逆:
let surrounding = [1, 2, 1];
let sum = surrounding[0] + surrounding[1] + surrounding[2];
let inverted = [sum-surrounding[0], sum-surrounding[1], sum-surrounding[2]];
console.log(inverted);
// Pick a random color according to inverted probabilities:
let invSum = 2*sum;
let rnd = Math.floor(Math.random() * invSum);
let color = rnd < inverted[0] ? 0
: rnd < inverted[0] + inverted[1] ? 1
: 2;
console.log(color);