Вы в основном делаете это правильно, чтобы получить то, что, как я полагаю, вы хотите, - это цвет, который выглядит средним диапазоном между вашими двумя входами, но вам просто нужно иметь дело с тем фактом, что этот расчет выполняется по кругу, который оборачивается. (Я предполагаю, что вы на самом деле не хотите «смешивать, как краска», а просто среднечастотный цвет - т.е. вы не хотите, чтобы красный и зеленый давали коричневый, верно?)
Вот функция Python, которая выбирает угол между двумя углами на окружности. В основном он просто пробует два варианта (добавляя 360 или нет) и выбирает тот, который дает угол, ближайший к исходным углам:
pairs = [(0, 60), (60, 239), (60, 241), (0, 240), (350, 30)]
def circ_ave(a0, a1):
r = (a0+a1)/2., ((a0+a1+360)/2.)%360
if min(abs(a1-r[0]), abs(a0-r[0])) < min(abs(a0-r[1]), abs(a1-r[1])):
return r[0]
else:
return r[1]
for a0, a1 in pairs:
print a0, a1, circ_ave(a0, a1)
производит:
0 60 30.0
60 239 149.5 # 60, 240 is ambiguous
60 241 330.5
0 240 300.0
350 30 10.0
(я чувствую, что должен быть более простой способ сделать это вычисление, но мне это не пришло в голову.)