Russian Qt Forum
Ноябрь 23, 2024, 07:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4] 5   Вниз
  Печать  
Автор Тема: Сложить 2 QColor  (Прочитано 26996 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #45 : Январь 29, 2013, 09:39 »

Точно, именно на это я намекал.
Что-то слишком тонко  Улыбающийся

Эммм... Вам не кажется, что вы только что описали qRgb классик?
Как всегда не въехали и не разобрались. qRgb здесь не годится

И к чему эта тафтология, если всё равно ваш "оператор", который вы не привели
Как всегда верещите и захламляете тему  Улыбающийся
Записан
Bepec
Гость
« Ответ #46 : Январь 29, 2013, 09:43 »

Примерно пять ваших тем сводятся к "А как сделать вот так и чтобы оно было универсальным и учитывало все мои невысказанные сначала требования".
Может хватит гоняться за идеалом и будоражить остальных?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #47 : Январь 29, 2013, 09:44 »

Что-то слишком тонко  Улыбающийся
Тонко?? Да по моему толще не куда:
Все зависит от контекста его использования (оператора+): для эпизодического сложения двух цветов - он хорош, для складывания массива цветов на время - плох.
Как, в прочем, и все в программирование. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #48 : Январь 29, 2013, 09:57 »

Все зависит от контекста его использования (оператора+): для эпизодического сложения двух цветов - он хорош, для складывания массива цветов на время - плох.
Как, в прочем, и все в программирование. Улыбающийся
Не вижу чем Ваш оператор плох для сложения массива - да, вероятно альфа быстро переполнится, но все RGB сложены будут. Др дело напр так
Код
C++ (Qt)
QColor average = (c1 + c2) / 2;
 
Это не дает правильный результат, поэтому лучше не начинать городить операторы, а ограничиться ф-цией.
 
А с концепцией/философией я конечно согласен  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #49 : Январь 29, 2013, 09:59 »

Не вижу чем Ваш оператор плох для сложения массива
Тем, что для массива можно написать более эффективную реализацию. Улыбающийся

Др дело напр так
Код
C++ (Qt)
QColor average = (c1 + c2) / 2;
 
Это не дает правильный результат, поэтому лучше не начинать городить операторы, а ограничиться ф-цией.

Для начала нужно понять, что здесь происходит, а потом уже разбираться, почему это не дает правильный результат. Подмигивающий
« Последнее редактирование: Январь 29, 2013, 10:01 от Old » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #50 : Январь 29, 2013, 17:16 »

Для начала нужно понять, что здесь происходит, а потом уже разбираться, почему это не дает правильный результат. Подмигивающий
А это тоже непонятно?
Код
C++ (Qt)
QPoint middle = (pt1 + pt2) / 2;
 
Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #51 : Январь 29, 2013, 17:23 »

А это тоже непонятно?
Код
C++ (Qt)
QPoint middle = (pt1 + pt2) / 2;
 
Улыбающийся

А как вам такое: Подмигивающий
Код
C++ (Qt)
QPoint middle = (pt1 + pt2) ^ 2;
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #52 : Январь 29, 2013, 17:40 »

А как вам такое: Подмигивающий
Код
C++ (Qt)
QPoint middle = (pt1 + pt2) ^ 2;
 
А вот в книжках пишут что перекрытые операторы должны иметь точно такой же смысл как в C, т.е. как для простых типов (напр int, double). А поскольку Вы знаете в 100 раз больше - Ваш намек на неоднозначность оператора / меня удивляет  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #53 : Январь 29, 2013, 17:42 »

Ваш намек на неоднозначность оператора / меня удивляет  Улыбающийся
Для цвета он не однозначен. Да. Также, пожалуй, как и для точки. Улыбающийся
Ну не понимаю я как цвета можно складывать, умножать и делить. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #54 : Январь 29, 2013, 18:03 »

Для цвета он не однозначен. Да. Также, пожалуй, как и для точки. Улыбающийся
Ну не понимаю я как цвета можно складывать, умножать и делить. Улыбающийся
Любую точку можно представить как вектор из начала координат (0, 0, 0). То же самое и для цвета. А для векторов арифметика прекрасно определена и интуитивна.

Ну вот напр на мониторе видим 100% красный. Поделим на 2 - ну 50% красного. Добавим 100% зеленого, результат = оранжевый. Чего ж нельзя-то?  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #55 : Январь 29, 2013, 18:10 »

Любую точку можно представить как вектор из начала координат (0, 0, 0). То же самое и для цвета. А для векторов арифметика прекрасно определена и интуитивна.

Ну вот напр на мониторе видим 100% красный. Поделим на 2 - ну 50% красного. Добавим 100% зеленого, результат = оранжевый. Чего ж нельзя-то?  Улыбающийся
Вы сейчас рассказали о соглашениях. Если о них сообщать в документации, то конечно это можно использовать.
А если в QColor лежит цвет в HSV, то что я должен додумать, видя его деление на 15? Подмигивающий
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #56 : Январь 29, 2013, 18:56 »

Я бы не стал для такого объекта, как цвет (ARGB) переопределять оператор +.
Во-первых, в отличии от вектора, для цвета нарушается коммутативность суммы:
например с1 + с2 + с3 неравно с1 + с3 + с2.
А это неожиданный для конечного пользователя результат уже может сломать ему мозг в поисках ошибки (а она рано или поздно случится)..

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #57 : Январь 29, 2013, 19:02 »

Вы сейчас рассказали о соглашениях. Если о них сообщать в документации, то конечно это можно использовать.
А если в QColor лежит цвет в HSV, то что я должен додумать, видя его деление на 15? Подмигивающий
Ну так я и не предлагал делать никаких операторов для класса QColor, напротив, я считаю эту затею неудачной, о чем подробно сказал выше. Просто все (увы, включая Вас) начинают запрягать QColor, хотя это совершенно неуместно. Подобный эффект часто наблюдается и с др задачами/классами, напр QRegExp. Из инструментария выбирается класс наиболее подходящий - и (почему-то) автоматычно считается что использовать его = гуд. Но ведь это совсем не так. Собственно поэтому я и создал эту тему  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #58 : Январь 29, 2013, 19:03 »

Я бы не стал для такого объекта, как цвет (ARGB) переопределять оператор +.
Во-первых, в отличии от вектора, для цвета нарушается коммутативность суммы:
например с1 + с2 + с3 неравно с1 + с3 + с2.
А это неожиданный для конечного пользователя результат уже может сломать ему мозг в поисках ошибки (а она рано или поздно случится)..
Согласен, но давайте смотреть ширше. Кто нас заставляет делать обрезку (вследствие чего получается неоднозначность)? Почему мы должны ютиться в рамках QColor который для этого совсем не предназначен? Давайте введем свой класс который не имеет проблем с арифметикой
« Последнее редактирование: Январь 29, 2013, 19:08 от Igors » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #59 : Январь 29, 2013, 19:06 »

Ну так я и не предлагал делать никаких операторов для класса QColor, напротив, я считаю эту затею неудачной, о чем подробно сказал выше.
Ну так я в первом ответе вам это и написал, а m_ax в последнем. Улыбающийся

Еще в теме немного поучаствовал Верес, не не особо...
Поэтому я совершенно не понимаю, кто кроме вас начал запрягать QColor. Улыбающийся
Записан
Страниц: 1 2 3 [4] 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.272 секунд. Запросов: 23.