С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 17.09.2015
Сообщений: 51
1

Вычисление цвета на градиенте в зависимости от значения функции

21.11.2019, 16:18. Показов 4328. Ответов 10

Author24 — интернет-сервис помощи студентам
Здравствуйте
Хотелось бы получить небольшой совет или ссылку на статью по правильному вычислению цвета

Задача следующая: на палетке выбирается два цвета, рисуется Rectangle c заливкой линейным градиентом от первого цвета до второго, слева направо.

Это все реализовано.

Затем, у нас есть массив значений функции.
Задача состоит в том, чтобы привязать значения функции к цветам, то есть минимальное значение - левая граница, максимальное - правая, остальные - пропорционально.

Вывести значения цвета в каждой точке.

Как необходимо действовать?
Смешивать цвета по каким либо формулам? Если да, то как?
Просто брать среднее?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2019, 16:18
Ответы с готовыми решениями:

Вычисление значения функции в зависимости от аргумента
Дана функция: у(х): exp(x+5) if x>1; log(abs(sin(pow(x,2)+15*x))) if x<0;...

Изменение цвета строки в зависимости от значения
Как изменить цвет строки если в ней содержится строка с "Active"? <%@ Page Language="C#"...

Изменение цвета поля в зависимости от значения
Доброго времени суток. Имеется заполненная таблица, одно из полей которой должно изменять цвет в...

Смена цвета текста, в зависимости от значения
Приветствую. Вот какое дело. Вступление У меня есть страничка вывода заказов. Там в таблице...

10
фрилансер
5853 / 5392 / 1103
Регистрация: 11.10.2019
Сообщений: 14,394
21.11.2019, 16:53 2
я думаю, нужно произвести пропорциональное преобразование:

C
1
2
3
   min  ...   max    //x-значение функции
    0   ...    1     //float k - относительное положение x
color_1 ... color_2  //точка на градиенте
то есть, k(x) выведется из соотношения
C
1
(max-min)/(max-x) == (1-0)/(1-k)
0
0 / 0 / 1
Регистрация: 17.09.2015
Сообщений: 51
21.11.2019, 17:12  [ТС] 3
Алексей1153, спасибо
с пропорциями то понятно, непонятно как от относительного положения перейти непосредственно к значению формата RGB
там же вроде бы не просто пропорциональное преобразование каждой из компонент?
0
фрилансер
5853 / 5392 / 1103
Регистрация: 11.10.2019
Сообщений: 14,394
21.11.2019, 18:14 4
Лучший ответ Сообщение было отмечено zloi_templar как решение

Решение

zloi_templar, именно каждый компонент QColor точно также пропорционально взять. Только прозрачность можно принудительно определённую оставить

вроде так
C++ (Qt)
1
2
3
4
5
6
7
8
if(red2>=red1)
{
    red=red1+(red2-red1)*k;
}
else
{
    red=red2+(red1-red2)*k;
}
1
90 / 17 / 6
Регистрация: 21.09.2016
Сообщений: 176
21.11.2019, 19:01 5
zloi_templar, Привет! Я так понял Вы решаете дифференциальные уравнения, а потом красите сетку?
0
фрилансер
5853 / 5392 / 1103
Регистрация: 11.10.2019
Сообщений: 14,394
21.11.2019, 20:55 6
zloi_templar, кстати, раз такое дело, почитай про классы QGradient и его производные QConicalGradient, QLinearGradient, QRadialGradient, с ними такую красоту наводить можно. Аппаратное ускорение прилагается )
0
0 / 0 / 1
Регистрация: 17.09.2015
Сообщений: 51
22.11.2019, 12:44  [ТС] 7
Алексей1153, спасибо) удивлен, если честно
Не думал, что с цветами сработают такие пропорциональные преобразования)
думал там все гораздо сложнее, стандартом не обойтись)
Для отображения палитры я и использую QLinearGradient)
Аппаратное ускорение не нужно включать программно?

Добавлено через 2 минуты
RJM, нет, задача проще, есть график функции, я заливаю весь экран цветами по значениям
0
фрилансер
5853 / 5392 / 1103
Регистрация: 11.10.2019
Сообщений: 14,394
22.11.2019, 13:33 8
Цитата Сообщение от zloi_templar Посмотреть сообщение
Аппаратное ускорение не нужно включать программно?
по-моему, оно сразу из коробки включено, и наверняка это OGL

я делал аналог jinx (не доделал, так как заказчик пропал, но некоторые эффекты реализовал)

например, вот такая вертушка (сделанная вышеуказанными градиентами) крутится,
а на другом скрине - суммарные эффекты четырёх-восьми картинок с линейными градиентами (по движению напоминает рябь на воде)

FPS очень бодрый, хотя я специально не включал ускорение. Процессор нагружен хорошо для второго скрина, там я расчитываю много всего в реальном времени и миксую картинки. Думаю, если покопаться и поотлаживать пооптимизировать, то процессор будет отдыхать ))
Миниатюры
Вычисление цвета на градиенте в зависимости от значения функции   Вычисление цвета на градиенте в зависимости от значения функции  
0
0 / 0 / 1
Регистрация: 17.09.2015
Сообщений: 51
26.11.2019, 15:50  [ТС] 9
Алексей1153, c цветами оказывается немного неверно)
Только что заметил, что получаются другие цвета, особенно когда есть нулевая компонента
Переписал пропорции, с ними вроде бы верно:

C++
1
2
3
4
5
red=r1*(1-k)+r2*k;
green=g1*(1-k)+g2*k;
blue=b1*(1-k)+b2*k;
 
// k - относительное положение х
0
фрилансер
5853 / 5392 / 1103
Регистрация: 11.10.2019
Сообщений: 14,394
26.11.2019, 16:52 10
zloi_templar, в моём варианте обязательна проверка if(red2>=red1) , иначе из-за переполнения в байте будет неверный результат. Твой вариант считает в вещественных числах
0
0 / 0 / 1
Регистрация: 17.09.2015
Сообщений: 51
26.11.2019, 17:58  [ТС] 11
Алексей1153, ну он же автоматом округляет до целого в QColor)
у меня в линейном градиенте, при смешивании двух цветов, только так работает
0
26.11.2019, 17:58
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2019, 17:58
Помогаю со студенческими работами здесь

Изменение цвета поля в зависимости от значения
Как в ленточной или табличной форме (Access 2000) при помощи VBA подсветить поле, в зависимости от...

Изменение значения ячейки в зависимости от цвета
Здравствуйте, каким условием проверить диапазон ячеек зеленого цвета, для того, чтобы изменить в...

Вычисление значения выражения в зависимости от значения аргумента

Изменение цвета точки в зависимости от значения температуры
Всем привет. У меня следующий вопрос. Есть следующие исходные данные: координаты точки и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru