2 шаг) Рассмотрим вектор (0,0,0) – (R,G,B). Какие грани будет пересекать этот вектор?
Если R = max R соответствующая прямая пересечет грань куба
[-1,0,0,1] = [ERDW].
грань
Если G = max G: [0,1,0,1] = [FWDG].
Если B = max B: [0,0,-1,1] = [BEWF].
Рассмотрим вектор (1,1,1) – (R,G,B).
R = min R: [-1,0,0,0] = (OBFG).
G = min G: [0,-1,0,0] = (OREB).
B = min B: [0,0,1,0] = (ORDG).
Ax + By + Cz + D = 0
Уравнение линии, проходящей через точки
Запишем в параметрическом виде.
Пусть линия пересекает плоскость в точке
Тогда условие пересечения имеет вид:
(1)
Отсюда выражаем k:
(2)
AB – вектор цвета.
AC – вектор цвета, продолженный до пересечения с гранью. Тогда яркость равна:
Исходя из системы (1), это будет равно:
Исходя из (2) и учитывая, что
Можно записать, что
Bv – значение компоненты B.
B – коэффициент в уравнение плоскости.
Если R = max(R,G,Bv), то k = -1/-R = 1/R.
Если G = max(R,G,Bv), то k = |-1/G| = 1/G.
Если Bv = max(R,G,Bv), то k = -1/-Bv = 1/Bv.
Отсюда следует, что значение яркости можно записать:
Brightness = 1/k = max(R,G,Bv) принадлежит интервалу [0, 1],
если в процентах, то умножить на 100.
Теперь ищем насыщенность (Saturation).
Saturation (по определению) – это расстояние от точки серого до заданной (RGB), делённое на расстояние от точки серого до точки пересечения плоскости и вектора от точки серого до (R,G,B).
Точка серого – это расстояние на главной диагонали от 0 до значения яркости.
Точка M пересекает плоскости куба и прямой P1P2.
Таким образом, учитывая предыдущие формулы, найдем, что Saturation = 1/k.