これは@bobinceの答えよりも少し粗雑で優雅ではないように見えますが、なんてことでしょう。
//setup
var colours = [], num_colours = 10, skew_to = 255, skew_chance = 20;
//get as many RGB vals as required
for (var i=0; i<num_colours; i++) {
//generate random grey
var this_grey = Math.floor(Math.random() * 256);
//skew it towards the @skew_to endpoint, or leave as-is?
if (Math.floor(Math.random() * 100) >= skew_chance && this_grey != skew_to) {
//skew by random amount (0 - difference between curr val and endpoint)
var skew_amount = Math.floor(Math.random() * Math.abs(this_grey - skew_to));
this_grey += ' (skewed to '+(skew_to < this_grey ? this_grey - skew_amount : this_grey + skew_amount)+')';
}
colours.push(this_grey);
}
console.log(colours);
基本的に、ランダムグレーを生成し、で指定されている可能性のある(パーセンテージとして)に基づいて、skew_chance
スキューするかどうかを決定します。(これを一定ではなく、時々作成したい場合)。スキューすることを決定した場合、乱数がグレー値に加算または減算されます(スキューエンドポイントが現在の値を下回っているか上回っているかによって異なります)。
この乱数は、0から現在の値とエンドポイントの絶対差までの数値です。たとえば、現在の値が40で、エンドポイントが100の場合、追加される数値は0から60の間です。
私が言うように、@ bobinceの答えはやや、えー、もっと優雅です!