「色の距離」でリストを並べ替えたいと思っています。次の関数を使用して、2つの色の間の距離を計算しています。
double colorDistance(Color c1, Color c2) {
double rmean = (c1.getRed() + c2.getRed()) / 2;
int r = c1.getRed() - c2.getRed();
int g = c1.getGreen() - c2.getGreen();
int b = c1.getBlue() - c2.getBlue();
double weightR = 2 + rmean / 256;
double weightG = 4.0;
double weightB = 2 + (255 - rmean) / 256;
return Math.sqrt(weightR * r * r + weightG * g * g + weightB * b * b);
}
ご覧のとおり、RGB値を使用して2つの色の間の「距離」を計算しています。この関数は、正確な精度を必要としないため、計算する必要があるものに対して素晴らしく機能します。問題は、色の距離に基づいてソートされたリストを作成できるように、距離だけでなく、c1がc2の前にあるか後にあるかを判断できる必要があることです。
それが十分に明確でない場合は、例が役立つかもしれません。純粋な黒と純粋な白の間の色の距離は256付近になります。現在の状態では、この関数はcolorDistance(黒、白)とcolorDistance(白、黒)に対して同じ〜256を返します。colorDistance(黒、白)が256を返し、colorDistance(白、黒)が-256を返すようにするにはどうすればよいですか?
それがオプションである場合、私はHSV / HSLを使用することを嫌いではありませんが、RGBについてははるかに精通しています。HSV / HSLを使用して正または負の色の距離を計算する機能を提供できる場合は、それを有効にしてください。
またはさらに良いことに、2つの色を取り、c1がc2の前に来るか後に来るかを単純に決定する別の単純な関数!