После преобразования мне нужно, чтобы углы треугольника касались окружности юнитов в точках <0,-1>
"вверху", <-√3/2,1/2>
"внизу слева" и <√3/2,1/2>
"внизу справа". Я выбрал нижний левый угол черной точкой ( val = 0), а когда val = 1, верхом будет точка цвета ( val =1 и sat = 1), а справа внизу будет точка белого ( val = 1 и sat = 0).
Чтобы достичь этого, я сначала определил правый край как уравнение
<x,y> = <0,-1>*sat + <√3/2,1/2>*(1-sat)
^ ^-- When sat = 0, the result is this point
'-- When sat = 1, the result is this point
Затем я масштабировал эту линию в направлении <-√3/2,1/2>
, когда val стремится к нулю
<x,y> = ( <0,-1>*sat + <√3/2,1/2>*(1-sat) )*val + <-√3/2,1/2>*(1-val)
<x,y> = <0,-1>*sat*val + <√3/2,1/2>*(1-sat)*val + <-√3/2,1/2>*(1-val)
^ ^ ^-- When val = 0, the result is this point
| '-- When val = 1 and sat = 0, the result is this point
'-- When val = 1 and sat = 1, the result is this point
Преобразование из векторной формы:
x = 0*sat*val + √3/2*(1-sat)*val + -√3/2*(1-val)
y = -1*sat*val + 1/2*(1-sat)*val + 1/2*(1-val)
Расширение:
x = -√3/2*val*sat + √3*val - √3/2
y = -3/2*val*sat + 1/2
Перестановка:
(√3*x - y + 2)/3 = val
(1 - 2*y)/3 = sat*val
Решение для сб и val :
sat = (1 - 2*y)/(√3*x - y + 2)
val = (√3*x - y + 2)/3