
Последние записи
- Прозрачность тайлсета в TPNGImage
- Как сделать VBA макрос в excel
- Поиск по столбцу 1-ого не нулевого значения (формулой в Microsoft Office Excel)
- Простановка единиц в ячейки под объектами (Microsoft Office Excel)
- Расчет затраченного времени между определенным рабочим временем (формулой в Microsoft Office Excel)
- Мигающий экран на Assembler
- VBA-макрос по копированию 10 строчек в выбранном диапазоне в Microsoft Office Excel
- Копирование только нужного диапазона в Microsoft Office Excel
- Перенос диапазона стоки в Microsoft Office Excel на другой лист по условию
- Мелодия в Pascal.ABC.Net с помощью System.Console.Beep — задержка воспроизведения звука

31st
Мар
Сортировка цветов
Posted by maloy under Delphi, Архив, Заметки
Altera
Вот такая головоломка заявилась:
Короче надо отсортировать цвета. Ну вообще я в функции сравнения следующее написал:
result := color1 - color2;
Сортирует то как надо, в математическом плане. Да смотрится это для человека как-то не так!
Вон, между фиолетовыми какой про межуток из синих цветов. Надо-бы как-то так, что бы реальнее было-бы…
mutabor
p/s Нарисовал на листике, действительно так и есть, три синусоиды к-рые отличаются по фазе. Вот тебе и значения R G B.
Вот код, и результат его работы
uses
Math;
var
r, g, b: byte;
i: integer;
begin
for I := 0 to 360 do begin
r:=Round(128+cos(DegToRad(i))*128);
g:=Round(128+cos(DegToRad(i+240))*128);
b:=Round(128+cos(DegToRad(i+120))*128);
Canvas.Pen.Color:=RGB(r,g,b);
Canvas.MoveTo(i, 0);
Canvas.LineTo(i, 50);
end;
end;
Красный цвет совпадает с косинусом, зеленый — сдвинут по фазе на 240 град., синий на 120.
Но за счет того что синусоида имеет плавную форму, чистых цветов на границах нет (желтого например), тут нужно синусоиду как бы дискретной сделать, с линейными (по диагонали) перепадами, и плоскими пиками равным по длине перепаду * 2. Плюс черные полосы нужно разобраться что тут делают.
Altera
Сделал так:
function compareColor(const color1, color2: tColor): integer;
var
h1, h2, s1, s2, l1, l2: byte;
begin
ColorToHSL(color1, h1, s1, l1);
ColorToHSL(color2, h2, s2, l2);
result := h2 - h1;
if result = 0 then
result := s2 - s1;
if result = 0 then
result := l2 - l1;
end;
Вроде работает нормально…
тема на форуме от 2009 года