Тема: Показати кольорами великі, малі і середні числа

В мене є курс валют
І мене потрібно найслабшу валюту показати червоним кольором а найсильнішу зеленим і середню жовтим
Для цього я вибрав модель кольорів RGB вона сама зручна (на мій погляд) бо 1 і 2 колір створить 3 жовтий (наприклад якщо розбити 256 на 140 i 116 (бо 256 = 140 + 116) то виходить жовтий колір)

Я шукаю мінімальне і максимальне число
[code=С++]
        if(element > maxElement)
            maxElement = element;
        if(element < minElement)
            minElement = element;
[/code]

Віднімаю мінімальне від максимального для отримання числа з якого я буду брати відсотки
[code=С++]num = maxElement - minElement;[/code]

Беру відсотки
а = число з якого будемо брати відсотки
б = від якого число
відсотки=(б*100)/а

Наприклад

а = 7
б = 3
(3*100)/7=42,85%

[code=С++]interest = ( model->index(i, 2).data().toDouble() * 100. ) / num;[/code]

А дальше я заплутався

виходить є два кольори по 256 і 256 але мені потрібно щоб вони були залежні і не створювали ін. кольори крім червоного зеленого і жовтого, тому в мене є одне число 256 і все, а його потрібно поділити між двома кольорами.

Як перетворити відсотки від числа до відсотків кольору, наприклад 42,85%
я зробив так формулу
red = (42,85 * 2,56 *100) / 256
green = 256 - red

2,56 - тому що 100* 2,56 = 256


[code=С++]
r = ((interest * 100.) / 256.);
g = 256 - r;
[/code]

І в результаті в мене все зелене, практично все крім Золото, Платина, Паладiй воно чогось жовтого відтінку

Допоможіть скласти формули за якими можна розрахувати колір, тобто в нас є мінімальна і максимальна валюта і по цих даних потрібно зробити червоний колір для найслабшої, жовтий для середньої і зелений для сильної валюти, все це робиться в моделі RGB

Подякували: 221VOLT1

2

Re: Показати кольорами великі, малі і середні числа

Пропорцію використовуйте

шкала валют 0-maxCurrency, шкала кольорів 0-255, 
i - то буде величина валюти поточна.
color - інтенсивність кольору.
т.є. при 0 - 0, при maxCurrency - 255, т.є.
maxcolor / color = maxCurrency / i
=>
color = maxColor*i / maxCurrency
=>
color = 255*i / maxCurrency

Якщо треба з зеленого в червоний, то плавно збільшуйте R і зменшуйте G, B завжди 0.
для G - зворотня пропорція, або швидше просто G=255-R та і все, нічого його перераховувати.

Подякували: 221VOLT, Betterthanyou, leofun013

3 Востаннє редагувалося raxp (05.06.2016 18:22:54)

Re: Показати кольорами великі, малі і середні числа

...градієнтний перехід від кольору до кольору за значенням числа від заданого максимуму (за яскравістю):

t1 := rgb(0, 255, 0); // колiр вiд
    t2 := rgb(0, 0, 255);   // до

    tout:= RGB(GetRValue(t1) - round((GetRValue(t1) - GetRValue(t2)) * VALcurrent / VALmax),
                GetGValue(t1) - round((GetGValue(t1) - GetGValue(t2)) * VALcurrent / VALmax),
                GetBValue(t1) - round((GetBValue(t1) - GetBValue(t2)) * VALcurrent / VALmax));

http://ipic.su/img/img7/fs/Bezymyannyj.1465143461.png

Подякували: 221VOLT, Betterthanyou, leofun013

4 Востаннє редагувалося Yola (08.06.2016 14:46:10)

Re: Показати кольорами великі, малі і середні числа

Зверніть увагу на HSV модель. Жовтий, зелений, червоний ідуть один за одним по колу відтінків.
https://en.wikipedia.org/wiki/File:HSV_color_solid_cylinder_alpha_lowgamma.png

Подякували: leofun01, Betterthanyou2