5

ここに、色に関する興味深い実世界のアルゴリズム要件があります。

  1. N きれいな色: 美しいグラフ (例: 円グラフ) を描くためにNは、「十分に異なる」色の組み合わせをランダムに選択する必要があります。これは、明るさと彩度を固定し、色相を のステップで段階的に進めることで実現できます360/N
  2. 安定した色の割り当て: ('A'、'B'、'C') とラベル付けされたセクターを持つ Pie_1 と ('B'、'C'、'D') とラベル付けされたセクターを持つ Pie_2 が与えられた場合、セクターの色がB と C は、Pie_1 と Pie_2 の両方で同じです。これは、時間の経過とともにセクターがチャートから削除または追加された場合の混乱を防ぐのに役立ちます。ラベルは唯一の安定したものです。
  3. ハードコードされた色を許可する: アルゴリズムはハードコードされたラベル -> 色の関係を入力として許可する必要がありますが、残りのラベルの色は (ルール 1 と 2 に従って) 計算されます。

このアルゴリズムは、非常にアドホックに見えますが、複数の状況で役立つと思います。

何か案は?

更新: エリックは正しく、新しいラベルが現れたり消えたりするたびに、各ラベルの色の安定性を保証することは不可能です. しかし、「十分に安定している」、つまり色の変化が最小限に抑えられていれば満足です。

私は次のようなことを考えていました:

  1. すべてのラベルは、hash(label)%360 を使用してランダムな色相値を取得します
  2. 生成された色相が十分に異なることを保証するために、色相環を一定量のステップ (つまり: 2*N) で分割し、以前の色相値を新しい微分値に「丸める」ことを試みます。
  3. 異なるラベルが同じ丸みを帯びた色相値になる場合、何らかの形で関係を解消し、ポイントを別の場所に移動します。

しかし、ハードコーディングされた色の問題は脇に置きます。

4

1 に答える 1

4

カラーホイールアルゴリズムを使用して、一緒に見栄えのするランダムな色のセットを選択できます。これは、実装ガイド、または他の多くのグーグルに関連するSOの質問です。

ラベルのハッシュのようなものをカラーホイールの開始点として使用して、安定性を確保できます。これは、3。を満たします。特定のラベルハッシュ値がカラーホイールの特定の開始点に対応する必要があることを示すオーバーライドメカニズムがある場合。

編集:

カラーホイールを使用すると、1つのマスター開始点(たとえば(hash(A)%360)を選択し、Aと一緒に使用したときに他の2つの色(B、C)が「適切」であることを確認できます。BとCはAによって決定されます。後で円グラフ(B、Y、Z)を作成できます。Bは(hash(B)%360)として設定され、(A、B、C)の場合とは異なります。

円グラフのラベルを任意に混在させることができる場合、どのアルゴリズムもそれらが常に一緒に見栄えがすることを保証できません。簡単な証拠は次のとおりです。

一緒に見栄えがするように、A、B、Cを選択します。

ここで、Aを任意の色Zで表示します

AとZが衝突するように、Zの色を選択することもできます。

特定の色のセットが一緒に見栄えが良く、同じセットを選択すると同じ色が再現されることを保証することしかできません。

たとえば、最初のラベルのハッシュをホイールの開始点として使用するか(hash(A))、ハッシュを組み合わせることができます(hash(A)+ 31 * hash(B)+ 31 * 31 * hash(C) )。31(素数)を掛けることは、複数のハッシュを組み合わせるときに、より良い数学的分布を保証するのに役立つJavaの世界からのものです。

于 2010-06-02T01:37:26.420 に答える