ここに、色に関する興味深い実世界のアルゴリズム要件があります。
N
きれいな色: 美しいグラフ (例: 円グラフ) を描くためにN
は、「十分に異なる」色の組み合わせをランダムに選択する必要があります。これは、明るさと彩度を固定し、色相を のステップで段階的に進めることで実現できます360/N
。- 安定した色の割り当て: ('A'、'B'、'C') とラベル付けされたセクターを持つ Pie_1 と ('B'、'C'、'D') とラベル付けされたセクターを持つ Pie_2 が与えられた場合、セクターの色がB と C は、Pie_1 と Pie_2 の両方で同じです。これは、時間の経過とともにセクターがチャートから削除または追加された場合の混乱を防ぐのに役立ちます。ラベルは唯一の安定したものです。
- ハードコードされた色を許可する: アルゴリズムはハードコードされたラベル -> 色の関係を入力として許可する必要がありますが、残りのラベルの色は (ルール 1 と 2 に従って) 計算されます。
このアルゴリズムは、非常にアドホックに見えますが、複数の状況で役立つと思います。
何か案は?
更新: エリックは正しく、新しいラベルが現れたり消えたりするたびに、各ラベルの色の安定性を保証することは不可能です. しかし、「十分に安定している」、つまり色の変化が最小限に抑えられていれば満足です。
私は次のようなことを考えていました:
- すべてのラベルは、hash(label)%360 を使用してランダムな色相値を取得します
- 生成された色相が十分に異なることを保証するために、色相環を一定量のステップ (つまり:
2*N
) で分割し、以前の色相値を新しい微分値に「丸める」ことを試みます。 - 異なるラベルが同じ丸みを帯びた色相値になる場合、何らかの形で関係を解消し、ポイントを別の場所に移動します。
しかし、ハードコーディングされた色の問題は脇に置きます。