Если вы собираетесь использовать HSV, вы должны понимать, что HSV - это не точки в трехмерном пространстве, а угол, величина и расстояние от вершины конуса. Чтобы вычислить расстояние для значения HSV, вам нужно либо определить свои точки в трехмерном пространстве путем преобразования.
X = Cos (H) * S * V
Y = Грех (H) * S * V
Z = V
Для обеих точек, а затем взять евклидово расстояние между ними:
Sqrt((X0 - X1)*(X0 - X1) + (Y0 - Y1)*(Y0 - Y1) + (Z0 - Z1)*(Z0 - Z1))
По стоимости 2 Cos, 2 Sin и квадратный корень.
В качестве альтернативы вы можете на самом деле вычислить расстояние немного легче, если вы настолько склонны, понимая, что при сведении к 2D-пространству у вас просто есть два вектора от начала координат, и применяя закон косинус, чтобы найти расстояние в пространстве XY:
C² = A² + B² + 2*A*B*Cos(Theta)
Где A = S * V первого значения, а B = S * V второго и косинус - разность тета или H0-H1
Затем вы учитываете Z, чтобы расширить 2D-пространство в 3D-пространство.
A = S0*V0
B = S1*V1
dTheta = H1-H0
dZ = V0-V1
distance = sqrt(dZ*dZ + A*A + B*B + 2*A*B*Cos(dTheta);
Обратите внимание, что, поскольку закон косинусов дает нам C², мы просто подключаем его к изменениям Z. Это стоит 1 Cos и 1 Sqrt. HSV очень полезен, вам просто нужно знать, какой тип цветового пространства он описывает. Вы не можете просто вставить их в евклидову функцию и получить из этого что-то связное.