2

元の色と正規分布に基づいてランダムな色を生成したいので、スクリプトに「これは使用する必要のある一般的な色ですが、今では大きく異なる場合は、ランダムなテクスチャを作成できます。そして、それは大丈夫です」。

Box-Muller変換を使用してJavaScriptで記述しています。しかし、すべてのR、G、およびB値で独立して正規分布を使用すると、望ましくないスパイクが発生します。たとえば、ベースカラーがライトグレーの場合、非常に赤、非常に緑、または非常に青のピクセルが表示されます。これはこれまでの私のスクリプトです(「0、255」は最小値と最大値です):

function randomHex(hex, deviation){
    R = HexToR(hex);
    G = HexToG(hex);
    B = HexToB(hex);
    R = randomNormal(R, deviation, 0, 255);
    G = randomNormal(G, deviation, 0, 255);
    B = randomNormal(B, deviation, 0, 255);
    return RGBtoHex(R,G,B);
}

私が探しているのは、RGBカラーの3D空間でポイントを定義し、球の中心が定義されたポイントであり、半径が正規分布でランダムに生成される球上の(均一に分散された)ランダムポイントを選択することです。

とにかく、それは理論です。JavaScriptでそれを機能させる方法がわかりません。

どんなポインタにも感謝します!

4

1 に答える 1

1

RGB の代わりに HSV (またはおそらく HSL) を使用してみます。RGB に変換する関数が必要です (例については、こちらを参照してください)。この場合、H は色相であり、値は色の円上の位置です。S と V は、それぞれ彩度と値/明るさを制御します。これにより、目的のディストリビューションをより細かく制御できるようになると思います。ウィキペディアの詳細については、こちらもご覧ください。

于 2011-03-21T14:28:47.663 に答える