ws2812 FastLed (Нужна помощь в создании градиента)

s1981
Offline
Зарегистрирован: 22.12.2013

Добрый вечер. Помогите пожалуйста с примером, для создания градиента на ленте ws2812 средствами библиотеки FastLED. Примеры с библиотекой для меня слишком сложные. Буду признателен любой помощи

sadman41
Offline
Зарегистрирован: 19.10.2016

Что в вашем представлении "градиент"?

s1981
Offline
Зарегистрирован: 22.12.2013

sadman41 пишет:
Что в вашем представлении "градиент"?

Плавный переход от одного цвета к другому. Например от синего к белому. (Не радуга, а 2 цвета!)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

s1981 пишет:

Плавный переход от одного цвета к другому.

Ну, так какие проблемы. Берёте первый цвет - (R1, G1, B1). Берёте второй цвет (R2, G2, B2). Считаете эти два цвета просто точками в трёхмерном пространстве и соединяете эти точки отрезком. Отрезок состоит из стольких точек, сколько градаций нужно в Вашем переходе.

Пишется в три строки с использованием встроенной функции map

s1981
Offline
Зарегистрирован: 22.12.2013

Спасибо. Но нихрена не понял

rkit
Offline
Зарегистрирован: 23.11.2016

Вообще-то такие переходы делаются по hsv, и в фастледе уже есть.

http://fastled.io/docs/3.1/group___colorutils.html#ga3144bb2bb66aeed33e2...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, чего тут понимать-то?

Ну, давайте нарисуем, только рисовать я будут с двумя компонентами цвета R и G, а то трёхмерный рисунок больно геморно, третью компоненту добавите точно также.

Итак, есть два цвета А и В. У каждого два компонента Ar и Аg (и Вr и Вg). Рисуем плоскость с осями R и G и наносим на неё две точки

Пока всё понятно?

Очевидно, что если соединить эти две точки отрезком, то все промежуточные цвета будут лежать на этом отрезке. Эти промежточные цвета будут точками на соединяющем отрезке, расположенными на равных расстояниях друг от друга. Примерно так (считаем, что расстояния равные)

У нас получилось 5 промежуточных цветов, но будем рассуждать про N.

Очевидно, что расстояние по G между цветами точками будет равно Δg = (Gb - Ga)/N. 

А расстояние по R между цветами точками будет равно Δr = (Rb - Ra)/N. 

Как определить координаты точки 1? Понятное дело, что R1 = Ra + Δr, в G1=Ga+Δr

Как определить координаты точки 2?  R2 = Ra + 2*Δr, в G2=Ga+2*Δr

Как определить координаты любой точки n?  Очевидно, что Rn = Ra + n*Δr, в G2=Ga+n*Δr

Всё! Вот мы и посчитали координаты/цвета всех N промежуточных точек!

Для трёхмерного случая добавляете точно такие же действия с третьей координатой - B

Теперь Вы знаете все промежуточные цвета.

s1981
Offline
Зарегистрирован: 22.12.2013

rkit пишет:

Вообще-то такие переходы делаются по hsv, и в фастледе уже есть.

http://fastled.io/docs/3.1/group___colorutils.html#ga3144bb2bb66aeed33e2...

Спасибо за помощь. Оказалось не так уж и сложно