|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.05.2017, 10:55 | #1 |
Пользователь
Регистрация: 28.03.2011
Сообщений: 38
|
Расчет цвета температуры на основе данных
Имеется двумерный массив с распределением температуры в пластине. Необходимо его визуализировать. Делаю это с помощью Bitmap который загружаю в pictureBox Проблема в том, что у меня получается сделать визуализацию только с переходом от синего (минимальная температура) до красного (максимальная) А мне бы хотелось, чтобы было как в тепловизоре - с желтым, зеленым, оранжевым и т.д. цветами. Может кто сталкивался или имеет представление как формулы для расчета цвета нужно использовать
|
15.05.2017, 11:06 | #2 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
B(lue) минимальная ---> G(reen) средняя(???)---> R(ed) максимальная
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 15.05.2017 в 11:18. |
|
15.05.2017, 12:26 | #3 |
Пользователь
Регистрация: 28.03.2011
Сообщений: 38
|
А как рассчитать это с помощью формул. Вот проходу я по массиву температур и определяю цвет color=Color.FromARGB(r,g,b), у меня вопрос как с помощью формул определить каждую составляющую цвета
|
15.05.2017, 13:48 | #4 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Посмотрите как это сделано в HSV
https://ru.wikipedia.org/wiki/HSV_(цветовая_модель) Делишь свой диапазон температур на поддиапазоны, припомощи условного оператора. И используешь в каждом поддиапазоне свою формулу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
15.05.2017, 13:51 | #5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,300
|
Код:
D = maxT - minT x = curT - minT r = max(min(1020 * x / D - 255, 255), 0) g = max(min(min(1020 * x / D, 510 - 510 * x / D), 255), 0) b = max(min(255 - 1020 * x / D, 255), 0) UPD Получилось практически то же самое, что и в HSV по ссылке из комментария выше. Только тут голубого нет, поэтому графики изменения компонентов RGB отличаются.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 15.05.2017 в 14:12. |
15.05.2017, 16:48 | #6 | |
Пользователь
Регистрация: 28.03.2011
Сообщений: 38
|
Цитата:
|
|
15.05.2017, 17:48 | #7 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,300
|
Просто вы его (голубой) не упомянули, поэтому я его не включил в список. Формулы очень просто вывел. Сначала записал упомянутые цвета, потом выписал их RGB представление. Затем нарисовал графики изменения каждой компоненты (аналогично, как в статье про HSV). А потом по точкам графика вывел уравнения прямых. На самом деле, чтобы так не мучаться и не выводить заново уравнения, если хочется поменять порядок цветов или добавить какой-либо цвет, проще оформить массив из цветов, находить между какими 2 цветами находится текущее рассматриваемое значение температуры и "смешивать" эти два цвета. Грубо говоря имеем цвета 0, 1 и 2. Если температура по шкале между цветом 1 и 2, причем на расстоянии 40% от 1, то результирующий цвет будет 0.4 * 1 + 0.6 * 2 = 1.6. И таким образом высчитывать каждую компоненту цвета. Переход может получиться не совсем через близкие цвета, с точки зрения человека.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
16.05.2017, 13:37 | #8 | |
Пользователь
Регистрация: 28.03.2011
Сообщений: 38
|
Цитата:
|
|
16.05.2017, 15:32 | #9 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,300
|
Рассматриваю пример без голубого, просто чтобы вы поняли принцип. Рассматриваем переход зеленого между цветами "1)" и "2)". Компонента изменилась с 0 до 255. Так и рисуем график. Берем точки 1 и 2 (обведены кружками) и подставляем их координаты в формулу под графиком. Таким образом рассчитываем все наклонные прямые. max и min позволяют ограничить значения снизу и сверху.
Мне повезло, что у зеленого только 2 перехода, иначе так просто формулы уже не составить (по крайней мере, мне так кажется). У вас график изменения компонент с учетом голубого цвета получится в точности как в HSV.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Расчет данных по кварталам | glok.01 | Microsoft Office Excel | 8 | 16.01.2017 19:05 |
В текстовом файле фиксируются результаты измерения температуры окружающей среды. Результаты измерения температуры фиксируются четы | dinar94 | Общие вопросы C/C++ | 1 | 26.04.2016 09:51 |
Расчет данных в нескольких диапазонах | igulnar | Microsoft Office Excel | 2 | 03.05.2012 16:58 |
Расчет осуществляется на основе сложных процентов. | Fretsaw | Microsoft Office Excel | 1 | 17.06.2010 05:26 |
Расчет в ячейке с изменением цвета... | Александр_63 | Microsoft Office Excel | 5 | 06.06.2010 13:02 |