То есть преобразовать RGB в линейный диапазон цветов в виде числа 0 - NNN.
Первое что пришло в голову - взять компонент
Add(ToRGB,16104365,910,728)
{
}
и затем тупо конкатенировать как строки числа соответствующие цветам с его нижних точек, начиная с синего : B + G + R. Тогда красный окажется в наименее значащем десятичном разряде и по идее, это создаст непрерывность палитры и ее числового описания.
Может есть другой способ? в Хиасме цвета тоже каким-то десятичным числом обозначаются, может это тоже самое?
--- Добавлено в 2023-03-29 23:35:12
А еще лучше не как строки соединять, а как десятичные числа:
Add(Img_GetPoint,12636372,910,672)
{
link(onGetPixel,2312092:doEvent1,[])
}
Add(Hub,2312092,959,672)
{
OutCount=4
link(onEvent4,16104365:doGetRGB,[(985,699)(985,717)(898,717)(898,734)])
}
Add(ToRGB,16104365,910,728)
{
link(onResult,7723617:doCalc,[(954,734)(954,762)(898,762)(898,790)])
link(Color,12636372:Color,[])
}
Add(MathParse,7723617,910,784)
{
@Hint=#38:Math.sin((Math.PI * angl / 180) / 2), |30:x = 150 + R * cos ((pi *2)* t)|31:y = 150 + R * sin (-(pi *2)* t)|27:%3 + %2 * cos ((pi *2)* %1)|
DataCount=3
MathStr="(%1 * 1) + (%2 * 10) + (%3 * 100)"
link(X1,16104365:R,[])
link(X2,16104365:G,[])
link(X3,16104365:B,[])
}
--- Добавлено в 2023-03-29 23:47:51
255 + 2550 + 25500 = 28305 Это максимальное число будет соответствовать белому цвету.
4 октавы по 12 нот = 48 нот. 28305 / 48 = 590. Значит каждая нота соответствует изменению десятичного цвета на 590 единиц. Теперь просто поделим текущий десятичный цвет / 590 и округлив получим номер нужной ноты. Вроде верно..
Редактировалось 3 раз(а), последний 2023-03-30 10:28:58