Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2017, 10:55   #1
PANDA8
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 38
По умолчанию Расчет цвета температуры на основе данных

Имеется двумерный массив с распределением температуры в пластине. Необходимо его визуализировать. Делаю это с помощью Bitmap который загружаю в pictureBox Проблема в том, что у меня получается сделать визуализацию только с переходом от синего (минимальная температура) до красного (максимальная) А мне бы хотелось, чтобы было как в тепловизоре - с желтым, зеленым, оранжевым и т.д. цветами. Может кто сталкивался или имеет представление как формулы для расчета цвета нужно использовать
PANDA8 вне форума Ответить с цитированием
Старый 15.05.2017, 11:06   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
только с переходом от синего (минимальная температура) до красного (максимальная)
B(lue)минимальная ---> ________________ ---> R(ed)максимальная

B(lue) минимальная ---> G(reen) средняя(???)---> R(ed) максимальная
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 15.05.2017 в 11:18.
evg_m на форуме Ответить с цитированием
Старый 15.05.2017, 12:26   #3
PANDA8
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 38
По умолчанию

А как рассчитать это с помощью формул. Вот проходу я по массиву температур и определяю цвет color=Color.FromARGB(r,g,b), у меня вопрос как с помощью формул определить каждую составляющую цвета
PANDA8 вне форума Ответить с цитированием
Старый 15.05.2017, 13:48   #4
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Посмотрите как это сделано в HSV
https://ru.wikipedia.org/wiki/HSV_(цветовая_модель)
Делишь свой диапазон температур на поддиапазоны, припомощи условного оператора. И используешь в каждом поддиапазоне свою формулу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 15.05.2017, 13:51   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
синий      0   0   255
зеленый    0   255 0
желтый     255 255 0
оранжевый  255 127 0
красный    255 0   0
Пусть minT и maxT - минимальное и максимальное значения температуры.
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 отличаются.
Изображения
Тип файла: png диапазон.png (2.8 Кб, 98 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 15.05.2017 в 14:12.
BDA вне форума Ответить с цитированием
Старый 15.05.2017, 16:48   #6
PANDA8
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 38
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
синий      0   0   255
зеленый    0   255 0
желтый     255 255 0
оранжевый  255 127 0
красный    255 0   0
Пусть minT и maxT - минимальное и максимальное значения температуры.
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 отличаются.
Спасибо, все получилось, а как вы данные формулы вывели и как быть с голубым цветом?
PANDA8 вне форума Ответить с цитированием
Старый 15.05.2017, 17:48   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Просто вы его (голубой) не упомянули, поэтому я его не включил в список. Формулы очень просто вывел. Сначала записал упомянутые цвета, потом выписал их RGB представление. Затем нарисовал графики изменения каждой компоненты (аналогично, как в статье про HSV). А потом по точкам графика вывел уравнения прямых. На самом деле, чтобы так не мучаться и не выводить заново уравнения, если хочется поменять порядок цветов или добавить какой-либо цвет, проще оформить массив из цветов, находить между какими 2 цветами находится текущее рассматриваемое значение температуры и "смешивать" эти два цвета. Грубо говоря имеем цвета 0, 1 и 2. Если температура по шкале между цветом 1 и 2, причем на расстоянии 40% от 1, то результирующий цвет будет 0.4 * 1 + 0.6 * 2 = 1.6. И таким образом высчитывать каждую компоненту цвета. Переход может получиться не совсем через близкие цвета, с точки зрения человека.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.05.2017, 13:37   #8
PANDA8
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 38
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Просто вы его (голубой) не упомянули, поэтому я его не включил в список. Формулы очень просто вывел. Сначала записал упомянутые цвета, потом выписал их RGB представление. Затем нарисовал графики изменения каждой компоненты (аналогично, как в статье про HSV). А потом по точкам графика вывел уравнения прямых. На самом деле, чтобы так не мучаться и не выводить заново уравнения, если хочется поменять порядок цветов или добавить какой-либо цвет, проще оформить массив из цветов, находить между какими 2 цветами находится текущее рассматриваемое значение температуры и "смешивать" эти два цвета. Грубо говоря имеем цвета 0, 1 и 2. Если температура по шкале между цветом 1 и 2, причем на расстоянии 40% от 1, то результирующий цвет будет 0.4 * 1 + 0.6 * 2 = 1.6. И таким образом высчитывать каждую компоненту цвета. Переход может получиться не совсем через близкие цвета, с точки зрения человека.
Начало я понял, а вот потом не очень. Интересует именно первый вариант. Я выписал составляющие голубого цвета, а как по нему график построить не совсем понимаю. И потом как работать с этими уравнениями чтобы вывести формулы....
PANDA8 вне форума Ответить с цитированием
Старый 16.05.2017, 15:32   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Рассматриваю пример без голубого, просто чтобы вы поняли принцип. Рассматриваем переход зеленого между цветами "1)" и "2)". Компонента изменилась с 0 до 255. Так и рисуем график. Берем точки 1 и 2 (обведены кружками) и подставляем их координаты в формулу под графиком. Таким образом рассчитываем все наклонные прямые. max и min позволяют ограничить значения снизу и сверху.

Мне повезло, что у зеленого только 2 перехода, иначе так просто формулы уже не составить (по крайней мере, мне так кажется). У вас график изменения компонент с учетом голубого цвета получится в точности как в HSV.
Изображения
Тип файла: png пояснение.png (61.2 Кб, 126 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчет данных по кварталам 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