Диапазон значений карты для карты цветов радуги

Мне нужна функция, которая отображает v с цветами радуги от красного до фиолетового. Точно сказал:

(rRB,gRB,bRB) = mapping_fct(v)

с v ϵ [0, а], где 0 должно быть красным и фиолетовым.

Есть что-нибудь существующее (пока ничего не нашло)?
Я пишу в C ++

0

Решение

Пожалуйста, попробуйте эту функцию, которая имеет линейную интерполяцию и переходит в красный-> зеленый-> синий-> красный. np — ваше максимальное значение (a), а p — входное значение (v). Вы можете заставить его остановиться на фиолетовом, немного увеличив np, так что p всегда будет меньше np.

void getcolor(int p, int np, float&r, float&g, float&b) {
float inc = 6.0 / np;
float x = p * inc;
r = 0.0f; g = 0.0f; b = 0.0f;
if ((0 <= x && x <= 1) || (5 <= x && x <= 6)) r = 1.0f;
else if (4 <= x && x <= 5) r = x - 4;
else if (1 <= x && x <= 2) r = 1.0f - (x - 1);
if (1 <= x && x <= 3) g = 1.0f;
else if (0 <= x && x <= 1) g = x - 0;
else if (3 <= x && x <= 4) g = 1.0f - (x - 3);
if (3 <= x && x <= 5) b = 1.0f;
else if (2 <= x && x <= 3) b = x - 2;
else if (5 <= x && x <= 6) b = 1.0f - (x - 5);
}

Пример использования:

float r,g,b;
getcolor(545, 1024, r, g, b);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector