491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|||||||||||
1 | |||||||||||
Доработка функции рассчета цвета08.07.2022, 15:22. Показов 849. Ответов 17
Метки нет (Все метки)
Всех приветствую. Сделал функцию рассчета цвета в зависимости от значения. В простом варианте выглядит так.
По информации со страницы.. (можете найти по "Определить математически <<средний цвет>> из 2х"). попытался сделать рассчет по более правильной модели смешения цветов, однако немного примитивно. Кликните здесь для просмотра всего текста
Кратко, в чем суть - в функции рассчитывается коэффициент кореекции яркости для среднего цвета между 2х заданных (ClrMax и ClrMin) и в зависимости от заданных Vl(текущее значение), Max(максимальное), и Min(минимальное) данный коэффициент пересчитывается - ближе к "краям" (Max и Min) он должен уменьшаться до 1. Я сделал, уменьшение по линейной зависимости, правильнее было бы конечно сделать по какой-нибудь синусоиде. Собственно в чем вопрос, что нужно поменять в данном выражении t = 1 + (t - 1) * (Hl - Abs(Vl - MidVl)) / Hl, чтобы график приобрел более плавную форму?
0
|
08.07.2022, 15:22 | |
Ответы с готовыми решениями:
17
Функция рассчета определенного интеграла. (Передача функции как аргумента) Доработка функции с векторами Скрипт рассчета PR Проблема в формуле рассчёта |
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
08.07.2022, 15:34 [ТС] | 2 |
Т.е. судя даже по виду наверное напрашивается что ближе к "краям" коэффициент должен повышаться очень медленно/мало, наверное синусоида была бы как-то оптимальнее.
Добавлено через 4 минуты Забыл добавить описание по файлу - там нужно протянуть выделение по солбцу, чтобыотобразить пересчитанные цвета.
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
||||||
08.07.2022, 17:37 [ТС] | 3 | |||||
Нашел как это сделать
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
09.07.2022, 08:15 [ТС] | 4 |
Было интересно применить вышеозначенный принцип рассчета цвета только не на RGB, а в какой-нибудь другой системе. Нашел одну живительную страничку, где изложены функции для конвертации почти всего во все (RGB, HSL, Long - стандартный формат Excel, Hex). Жаль правда, не было конвертаии Long - HSl и обратно, но были варианты RGB-HSL и обратно. Кое как сообразил по такой схеме
long - rgb - hsl (рассчет) - rgb - long. Однако, с HSL получился интересный результат, отличный от остальных (с нулевым значением что-то там не стыканулсь, добавил цвет вручную). Нет потери яркости, пожалй даже лишняя прибавка, и в середине высчитался цвет, вдимо соответствующий длине волны, между двумя крайними
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
10.07.2022, 10:27 [ТС] | 5 |
Кому интересно можете порешать такую задачку. Нужно найти промежуточный цвет между двумя заданными в системе HSL/HSV в зависимости от заданных значений (макс, мин, текущее - A, B, C).
Значение А, допустим, 30 B - 90 C - 65 Т.е. AB = 60, AC = 35 Первый цвет, допустим как на рисунке, примерно будет 240°, 50%, 50% (первая цифра обозначает градусы (0 - 360°), вторые две % 0-100%) Второй цвет, пусть будет 0°, 70%, 50% 3-е значение выщитывается проще, и я его напсал раным, главное посчитать H (hue), S (saturation)
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
10.07.2022, 10:30 [ТС] | 6 |
Гл. обр. надо выявить зависимость значений цвета от соотношения AC/AB
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
10.07.2022, 16:56 [ТС] | 7 |
А задачка-то довольно не простая, сам в шоке, вроде простые треугольники, но формулы шибко длинные.. карпел я долго над задачей, даже пришлось прибегнуть к помощи онлайн-упростителя формул, получилось в итоге так.
Если за обозначение вышеобозначенного принять a = S1 b = S2 c = cos(α) = H2 - H1 n = (Max-Val)/(Max-Min) S3 = (a^2(n-2)n-2abc(n-1)n+b^2((n-1)^2))^0.5 получилось из упрощения вот этого Кликните здесь для просмотра всего текста
S3 = ((n*((a^2 + b^2 - 2*a*b*c)^0.5))^2 + b^2 - 2*(n*((a^2 + b^2 - 2*a*b*c)^0.5))*b*(a^2/b + b -
a*c)/((a^2 + b^2 - 2*a*b*c)^0.5))^0.5 Осталось проверить, как будет ли работать формула в макросе, или я горе-математик )
0
|
828 / 479 / 185
Регистрация: 09.03.2009
Сообщений: 1,646
|
|
11.07.2022, 09:14 | 8 |
Не вникал, но. Когда-то давно нам надо было выводить график движения поезда на графопостроитель. Там тоже получались треугольники и адские формулы. Тогда упростили тем, что использовали перенос и поворот системы координат, совместив ее временно не с основными осями, а с треугольником. Формулы взяли в справочнике Выгодского. То есть система переносится, просто считается нужная точка треугольника, система возвращается назад. Вдруг вам поможет.
1
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
11.07.2022, 09:43 [ТС] | 9 |
Я прикидывал уже в макросе, и посчитал цвет для значений заданных в сабже. Решил, что лучше не собирать все в общую формулу для, допустим, "S3" или "H3", а разбивать на этапы поскольку в рассчете и того и другого участвуют одни и те же величины, и получается не так страшно.
Добавлено через 11 минут Точнее не сабже а в 5 топике
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
||||||
11.07.2022, 12:45 [ТС] | 10 | |||||
Так выглядит рассчет среднего цвета HSL/HSV для конретного случая
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
||||||
11.07.2022, 13:00 [ТС] | 11 | |||||
Забыл добавить функцию к общему повествованию. Пишут рабтает быстрее, чем worksheets.acos при многократных вызовах
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
11.07.2022, 18:33 [ТС] | 12 |
Корочи вот так, уйма головняка и эффект "мутной воды", надо еще будет CMYK попробовать, что-то подсказывает, что с ним все значительно проще, там все значения проценты и функции конвертации простые
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
12.07.2022, 19:11 [ТС] | 13 |
Добавил для сравнения системы рассчет среднего цвета в системах XYZ и LAB, методом простого среднего арифметического между соответствующими значениями. Для HSL рассчет выше-описанным методом, который не подошел для HSV, все равно высчитывает желтый, видимо там нужен какой-то другой подход.. Видно у HSL лишний сдвиг в синюю сторону, LAB, рекомендованный для градиентов дает заметный перевес в сторону красного, очень интересный вариант у XYZ.
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
12.07.2022, 21:14 [ТС] | 14 |
XYZ, почти нормально
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
13.07.2022, 08:22 [ТС] | 15 |
Осенило. Там где я про синусоиду писал, нужна не синусоида, а дуга окружности - сегмент. Правда вопрос, как лучше считать коэф. по CE или CD.
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
13.07.2022, 20:34 [ТС] | 16 |
LAB
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
13.07.2022, 20:37 [ТС] | 17 |
При мутных оттенках виден недостаток метода описанного в начале.
0
|
491 / 390 / 49
Регистрация: 08.02.2017
Сообщений: 1,567
|
|
13.07.2022, 20:48 [ТС] | 18 |
Информация
0
|
13.07.2022, 20:48 | |
13.07.2022, 20:48 | |
Помогаю со студенческими работами здесь
18
Символический метод рассчёта Программа для рассчета константы е Запись в файл результатов рассчета Программа для рассчёта по формуле Модуль рассчета стоимости доставки Ошибка рассчета в StringGrid C++ Builder Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |