Вверх ↑
Ответов: 1291
Рейтинг: 47
#1: 2023-03-29 23:29:47 ЛС | профиль | цитата
Вот еще интересная подзадача возникла - как цвета калейдоскопа преобразовать в ноты? Чтобы самому низкочастотному цвету, красному, соотвествовала самая нижняя нота, самому фиолетовому - самая верхняя.
То есть преобразовать 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
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Редактировалось 3 раз(а), последний 2023-03-30 10:28:58