虹に属する(または「虹色」に近い)nポイントを獲得しました。ここで、虹色でもあるポイントを指定して、n個のポイントから最も近い一致を見つけたいと思います。
これを行うための堅牢でシンプルなデータ構造とアルゴリズムの組み合わせは何ですか?(R、G、B)タプルとEularian距離を使用することが頭に浮かびました。
はい、深刻なユースケースがあります:-)
虹に属する(または「虹色」に近い)nポイントを獲得しました。ここで、虹色でもあるポイントを指定して、n個のポイントから最も近い一致を見つけたいと思います。
これを行うための堅牢でシンプルなデータ構造とアルゴリズムの組み合わせは何ですか?(R、G、B)タプルとEularian距離を使用することが頭に浮かびました。
はい、深刻なユースケースがあります:-)
おおむね正しいですが、HSL または HSV を使用すると、属性に重みを付けることができるため、おそらくもう少し正確になります。を参照してくださいcolorsys
。
おそらく、RGB 値をHSLに変換する必要があります。この場合、色相に基づいて色の近似を一致させる方がはるかに簡単です。
私は虹をいじっていません;-)しかし、私はほとんど同じ状況にあり、これにkdツリーを使用して、最も近い「ポイント」をすばやく検索します。私のポイントは、0-1 float の形式の RGB カラーでもあります
http://code.google.com/p/python-kdtree/
from kdtree import KDTree
data = [(1,2,3),(4,0,1),(5,3,1),(10,5,4),(9,8,9),(4,2,4)]
tree = KDTree.construct_from_data(data)
nearest = tree.query(query_point=(5,4,3), t=1)
通常の意味では、可視スペクトルの単色、つまり単一周波数の色を意味します (白またはピンクは虹色ではありません) 。そのような場合、それらを周波数または波長だけ、つまり単一の数値で表すことができるという大きな利点があります。たとえば、虹スペクトルのサンプル分割に対応する周波数を確認するには、ここを見てください。
n 個の数字があるので、別の数字 (別の虹色) を選び、それらのどれに最も近いかを決定する必要があります。これは些細なことです。
したがって、虹色を頻度で把握している場合 (そうすべきですが、そうでなければ、どのようにしてそれらが虹色であることがわかりますか?)、それは簡単な作業です。