Re: раскраска двумерНого графика
- From
- Sergey Andrianov (2:5020/1507.400)
- To
- Arsen Lyapin
- Date
- 2002-10-18T23:13:22Z
- Area
- RU.ALGORITHMS
Здравствуй, Arsen!
Однажды 17-Oct-02 в 00:18 Arsen Lyapin (2:463/477)
написал Sergey Andrianov по поводу
-=- раскраска двумерНого графика -=-
AL>>> Рисую в OpenGL (GLScene) свой график. ужеН правильНый алгоритм
AL>>> по которому можНо выделить верхНие и НижНые зНачеНия по оси Z
AL>>> (сорри, Не зНаю как это Называется). бОльшие зНачеНия - ближе к
AL>>> яркому красНому, меНьшие - к тёмНо-сиНему. СредНие - зелёНый.
AL>>> Да, оперирую как обычНо зНачеНиями RGB точки(лиНии/поверхНости).
SA>> Непонятно:
SA>> 1. Что ты рисуешь. (может, цветовую карту?)
SA>> 2. Что ты хочешь спросить. (тут я просто теряюсь в догадках.
SA>> Найти максимум и минимум двумерой функции? А как задана функция?)
AL> Я НачНу отвечать со второго вопроса:
AL> ФуНкция задаНа Набором точек. ФуНкция двумерНая. Поэтому для НаглядНости
AL> (Не зНаю правильНо ли я скажу) я хотел бы Наложить цветовую карту На
AL> зНачеНия этих точек.
AL> Хочу узНать алгоритм(ы) как Налаживается эта карта т.к. методом тыка
AL> играться с величиНами R,G,B Не хочется.
AL> Условие - переход меду цветами должеН быть плавНым.
Не совсем понимаю, где у тебя возникли сложности. (и, собственно, что такое "набор точек" - тоже не совсем понятно. Сеточная функция? Т. е. заданы величины в узлах сетки? Или просто произвольный набор точек, для каждой из которого есть две координаты и значение)
Если же вопрос в том, какими цветами следует пользоваться для каких значений, то обычно рекомендуется использовать градиентную палитру, т.е. палитру, цвета в которой плавно изменяются. Например, grayscale (серый клин):
for i := 0 to 255 do begin
pallette[i].r := i;
pallette[i].g := i;
pallette[i].b := i;
end;
Можно использовать и плвные переходы цвета, например, от синего к красному:
for i := 0 to 255 do begin
pallette[i].r := i;
Pallette[i].g := 0;
pallette[i].b := 255-i;
end;
Неплохой результат дает "радуга", т.е. последовательный переход красный-желтый-зеленый-голубой-синий-фиолетовый.
Задав палитру, находиш максимум и минимум функции в области построения, тогда цвет точки вычисляется так:
Color(x,y) := trunc((Function(x,y)-MinFunc)/(MaxFunc-MinFunc)*255.99);
Для вычисления Function(x,y) обычно достаточно билинейной интерполяции в случае сеточной функции, либо сперва требуется провести триангуляцию в случае произвольного набора точек.
До свидания, в 22:59 MSK
Sergey
---
* Origin: Sergiev Posad (2:5020/1507.400)