Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
ВнизИзменение цвета линий в цикле Найти похожие ветки
← →
Link (2002-10-08 13:49) [0]Никто не встречался с проблемой: как менять цвета линий в цикле.
С каждой прокруткой цикла строится один график. Нужно, чтобы в итоге все графики оказались разных цветов. Массивом не получится, т.к. число прокруток не ограничено.
Желательно, чтобы в итоге можно было узнать программно какому графику соответствует какой цвет.
Заранее спасибо!
← →
REA (2002-10-08 13:51) [1]Случайный цвет и запомнить его.
← →
Link (2002-10-08 13:54) [2]А как вызвать этот случайный цвет?
← →
still (2002-10-08 13:59) [3]type TColor = -(COLOR_ENDCOLORS + 1)..$02FFFFFF;
исходя из этого
просто делаешь инкремент цвета например, так
Color := Color+$000F0F0F - тогда каждая последующая линия будет светлее предыдущей
либо так
Color := Color+$0000FF20 -ну путем экспериментов можно добиться красивого результата
← →
REA (2002-10-08 14:00) [4]Color := RGBToColor(RandomR, RandomG, RandomB); например
константы генерировать из соображений контрастности с фоном
← →
shane54 (2002-10-08 14:04) [5]Ну или можно сделать совсем просто (если нужно немного цветов).
Создаем множество, в котором перечесляем цвета. Дальше цикл от первого цвета до последнего.
← →
KSergey (2002-10-08 14:24) [6]Вообще, совет shane54 (08.10.02 14:04) видится наиболее рациональным с точки зрения получения прогнозируемого результата. А то случайными числами такого можно наворотить ;) - никто потом не разберет.
Если же не боитесь экспериментов, то чтобы хоть как-то ограничить кол-во цветов и получить более-менее отличимые один от другого, воспользуйтесь, например, методикой, представленной на http://www.artlebedev.ru/free/colors/
← →
Хонь-юнь (2002-10-08 14:27) [7]...Цвета можно менять не перечерчиванием линий графика, а заменой палитры...
← →
Link (2002-10-08 14:28) [8]
> still
Конечно это выход, но они получаются одного цвета, но разных оттенков, а мне бы хотелось ярких цветов и совершенно разных
> REA
Может я не доконца понял твою идею, но у меня ругается, что нету RGBToColor и, видимо, поэтому не понимает RandomR, RandomG, RandomB.
> shane54
К сожалению, нужно, чтобы не было ограничено число прокруток.
← →
Link (2002-10-08 14:30) [9]
> Хонь-юнь
Цикл не меняет цвет графика, а строит совершенно другой, так что получается несколько на одной координатной сетке.
← →
Skier (2002-10-08 14:34) [10]>Link
Где-то так :
const
Red_Range = 255;
Green_Range = 255;
Blue_Range = 255;
begin
//................
Randomize;
Color := RGB(Random(Red_Range),
Random(Green_Range),
Random(Blue_Range));
//................
end;
← →
han_malign (2002-10-08 14:38) [11]Каждый охотник желает знать ...
Извиняюсь конечно но у человеческого зрения очень ограниченный спектр восприятия, и много совершенно разных ярких цветов ты не найдешь (ну штук сто может подберешь более-менее разных(если у реципиента профессиональное художественное зрение)), ну а уж до бесконечности: "если смешать все цвета радуги - то получится серый цвет"(Дракоша)
З.Ы. После 100-й (в лучшем случае) прокрутки ты все равно сможешь нормально различать не более 10-20 верхних линий (опять же в лучшем случае), ниже будет разноцветный хаос. А вообще размещать на одном поле более 3-4 диаграмм не ркомендуется (если конечно ты не бифуркации строишь)
← →
REA (2002-10-08 14:42) [12]Ну да. Это обратная функция есть, а RGBToColor нету.
← →
KSergey (2002-10-08 14:53) [13]> Link (08.10.02 14:28)
> К сожалению, нужно, чтобы не было ограничено число прокруток.
А вот этого вам не добиться никогда!
а) из психо-физических соображений о воозможностях человека, указанных han_malign (08.10.02 14:38)
б) видеокарта PC (да и любой цфровой железяки) имеет ограниченный набор цветов, который она может отобразить. Принципиально ограниченый. Не важно каким числом, но ограниченый.
А вообще может растолкуете поподробнее что надо? Просо несколько графиков простоить в одной сетке? А вы вообще понимаете, что разобрать неограниченной кол-во графиков все равно нельзя?! Равно как и нарисовать? Т.е. может просто ограничить себя разумной цифрой?
← →
han_malign (2002-10-08 15:01) [14]Я так понимаю что нужно смотреть динамику процесса (что то вроде медианного анализа), но для этого есть стандартные методы:
1. Развертка в 3D по шкале времени.
2. Спектрограмма(Оси: время, ордината, абсцисса отображается интенсивностью цвета( чем больше значение тем ярче(или наоборот))) (в общем-то тот-же 3D, но сверху).
← →
Link (2002-10-08 15:06) [15]
> KSergey
Абсолютно согласен. Вот только как выбрать разумную цифру так, чтобы было в самый раз? В принципе вариант с множеством проходит, но тут то и возникает вопрос: а сколько нужно будет графиков? Естественно не слишком много. Но хотелось бы не чувствовать себя в чётко установленных рамках. Обидно будет, если установить слишком большую цифру для ежедневного пользования, и слишком маленькую, для какой-то исключительной ситуации.
А если с массивом, то какой тип устанавливать для массива color, чтобы потом
Pen.Color:=color[p];
работало?
← →
Link (2002-10-08 15:46) [16]ОК. Уговорили ;). Согласен на массив.
Делаю так:
var
color:array[1..10] of TColor=($CC3300, $FFFF00, $660033, $FF00FF, $6600CC, $009999, $0099FF, $006633, $CCCC33, $FFCC33);
......
begin
......
Pen.Color:=color[p];
......
end;
Просит : Array type required
PS: Я воще-то ламер. Знакомый попросил написать программу, а я как могу стараюсь это сделать. Решаю проблемы по мере их поступления. Поэтому многие простые вопросы я знаю хуже, чем некоторые сложные. О массивах слышал, но ещё не сталкивался.
← →
DieHard (2002-10-08 17:11) [17]color - не совсем удачное названия для переменной
скорее всего оно с чем-нибудь конфликтует
← →
Link (2002-10-12 13:30) [18]Заменил color на colr, пишет:
Cannot initialize local variables
Но теперь другой вопрос. Я воспользовался советом Skier.
Всё замечательно. Даже цвета получаются вполне хорошие. Но при разворачивании окна сам график (не координатная сетка) получается двух разных цветов.
Случайно не знаете с чем это может быть связано?
Или, может быть, что-нибудь с массивом подскажите?
Заранее благодарю.
← →
Link (2002-10-12 14:18) [19]???
Очень нужно!!!!!!!!!!!!
Хоть какие-то соображения выскажите!!
Пожалуйста!!!
← →
Ru (2002-10-18 13:57) [20]такое сообщение может быть при попытке инициализации массива в процеуре, присваивать значения константе необходимо за пределами процедуры - делать их глобальными (если я правильно понял первую часть последнего вопроса)
← →
k (2002-10-18 15:24) [21]как мне кажется
с каждым графиком должен быть проассоциирован цвет.
т.е. есть у тебя график - структура или класс - у него должно быть свойство - цвет (я бы добавил еще и стиль, заметил han_malign ярких цветов маловато, а если еще и стили комбинировать - смотри сам)
дальше создай список цветов или сгенери его
то есть получи массив
MyColors :array[1..MaxColors] of TColor = (clBlack, clGreen, $00ff00, и т.д)
как назначить цвет для нового графика,
перебираем все графики, смотрим у них цвета (если число графиков меньше тысячи то это произойдет оч. быстро ). можно сразу составить список(массив с нумерами) занятых (или незанятых) цветов
назначаем первый же незанятый.....
при таком раскладе легко можно создавать/удалять графики не парясь над конфликтом цветов.
таков алгоритм в общих чертах..
← →
han_malign (2002-10-18 15:53) [22]>
var
color:array[1..10] of TColor=($CC3300, $FFFF00, $660033, $FF00FF, $6600CC, $009999, $0099FF, $006633, $CCCC33, $FFCC33);
2 Ru - область видимости абсолютно не причем.
Правильно будет(наверное сами уже догадались)
const
color:array[1..10] of TColor=($CC3300, $FFFF00, $660033, $FF00FF, $6600CC, $009999, $0099FF, $006633, $CCCC33, $FFCC33);
> Но при разворачивании окна сам график (не координатная сетка) получается двух разных цветов.
Случайно не знаете с чем это может быть связано?
Судя по всему текущий цвет меняется по OnDraw, который вызывется не только при отрисовке следущего графика, но и при изменении зоны видимости компоненты (при этом, по идее, в отрисовываемой заново половине должны исчезать все предыдущие графики).
Как бороться - рисовать в Bitmap которую по OnDraw Stretch-ить на Canvas
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c