18

いくつかのデータをテクスチャに描画したい:連続した多くのアイテム。それらは順番に作成されておらず、すべて異なるサイズである可能性があります(メモリヒープを考えてみてください)。各データ項目は小さな長方形であり、区別できるようにしたいので、それぞれに固有の色を付けたいと思います。

これで、rand()を使用してRGB値を生成し、それらがすべて異なることを期待できますが、RGB空間で適切に分散されない可能性があります。これより良い方法はありますか?たとえば、(ほぼ)繰り返される前に、さまざまな色を循環させる良い方法は何ですか?

色はアイテムのデータと一致する必要はありません。多くの値を見て、それらが隣接しているため、それらが異なることを確認できるようにしたいと思います。

私は何かを理解することができましたが、これは興味深い質問だと思います。:)

4

6 に答える 6

13

RGBカラーモデルを使用することは、適切なカラーミックスを取得するための良い方法ではありません。別のカラーモデルを使用して色を生成してから、そのカラーモデルからRGBに変換することをお勧めします。

代わりに、HSVまたはHSLカラーモデルをお勧めします。特に、色相を変更する必要があります。

Xの異なる色の値が必要な場合は、360をXで割ったステップサイズで0から360まで変化させます。

于 2009-04-21T15:40:21.227 に答える
4

あなたのサンプルスペースは何ですか...私たちが話しているアイテムの数。

からRGBトリプルの配列を構築できます

for(int r = 0; r < 255; r = r+16)
   for(int g = 0; g < 255; g = g+16)
      for(int b = 0; b < 255; b = b+16)
           // take r, g, b and add it to a list

次に、リストをランダム化して繰り返します。これにより、繰り返される色の前に16 ^ 3(4096)の異なる色が得られます。

于 2009-04-21T15:43:37.007 に答える
4

一般に、RGBは、初心者にとっては知覚的に非線形であるため、この種のことを行うのに最適な色空間ではありません。これは、RGBトリプレット間を等距離移動しても、私たちの目には同じように見えないことを意味します。

私はおそらくL*c * h *空間(も参照)空間、またはHSL空間で作業し、色相に均一な間隔を生成するだけです。これらのスペースは、ほぼ知覚的に線形になるように設計されています。

于 2009-04-21T15:46:08.687 に答える
2

Google "delta e cie 2000"; 色差の式は、2つの色の間の見かけの(視覚的な)距離を決定するのに役立ちます。(モニター上。顔料には異なる式があります。)ラボスペースの色(サイモンの小道具)で動作しますが、違いの知覚計算を適用します。

視覚的に区別できる色(つまり、互いに近い場合は違いがわかります)を確保するには、1.5前後の数値で十分であることがわかりましたが、識別可能な色(凡例で任意の色を見つけることができます)が必要な場合は、次のことを行う必要があります。それをぶつけます。

色のセットを作成することに関して...私はおそらくラボスペースのどこかから始めて、十分に大きな視覚的差異を与えるステップサイズを使用してそれを歩き回るでしょう(注:それは線形ではないので、ステップサイズはおそらく適応性がある)そしてリストをランダム化する。

于 2010-02-24T19:04:53.053 に答える
0

これは、マップのカラーリングに関連する4色の問題と非常によく似ています。これにより、いくつかの興味深い解決策が得られる可能性があります。

四色定理

于 2009-04-21T15:50:50.390 に答える
0

知覚的に異なる色のセットが必要な場合(それらを生成するためのアルゴリズムではない場合)、私は自分のWebサイトにそれを実行する無料のツールを作成しました:http:
//phrogz.net/css/distinct-colors.html

RGBまたはHSV空間(人間の知覚に関して均一に分散されていない)で等間隔を使用する代わりに、ツールを使用すると、HSV空間で値のグリッドを生成し、色にCMC(I:c)標準を使用できます。知覚的に互いに近すぎる色を捨てる距離。(2番目のタブの「しきい値」スライダーを使用すると、色を視覚的に区別する方法を制御して、結果をリアルタイムで表示できます。)

最後に、生成された色のリストをさまざまな基準で並べ替えてから、そのリストを均等に「シャッフル」して、リスト内で視覚的に異なる値が隣接していることが保証されます。(「インターリーブ」の値は約5にすることをお勧めします。)

この記事を書いている時点で、このツールはChrome、Safari、および(シム経由で)Firefoxでうまく機能します。IE9は、UIがインタラクティブな探索に広く使用するHTML5範囲入力スライダーをサポートしていません。

于 2012-02-22T23:48:08.703 に答える