Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2015, 19:20   #1
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию C# ZedGraph как менять цвет в цикле

На этот раз код полностью рабочий. Я таким образом обрабатываю по очереди 4 массива данных, и по очереди добавляю их в листы для построения графика.
Код:
for (int n4 = 0; n4 <= 3; n4++) //Какой символ вытаскиваем из 4
                {
                    //600 значений Ipart или Qpart = 4 символа по 150 значений. Выделяем по очереди один символ из 4
                    string Ipart4Sym = Ipart[itmr - 1]; string Qpart4Sym = Qpart[itmr - 1];
                    string Ipart1Sym = ""; string Qpart1Sym = "";
                    //
                    for (int i = 0 + n4 * Ipart4Sym.Length / 4; i < (Ipart4Sym.Length / 4 + n4 * Ipart4Sym.Length / 4); i++)
                    { Ipart1Sym += Ipart4Sym[i]; Qpart1Sym += Qpart4Sym[i]; }

                    fin = OFDM_spec(Ipart1Sym, Qpart1Sym, n, fin); // 1024 I поднесущих + 1024 Q поднесущих, 
                    // в I 150 Ipart, в Q 150 Qpart

                    fout = ifft(fin, n);                                        //Получаем массив выходных значений


                         //to shift complex values to -  
                        int i1 = 0; float[] finShift = new float[n * 2];
                        for (int i = 0; i < fin.Length; i++)
                        {
                            if (i >= fin.Length / 2) i1 = i - fin.Length / 2;
                            else i1 = i + fin.Length / 2;
                        finShift[i1] = fin[i];
                        }


                            for (int i = 0 + n4 * n; i < n + n4 * n; i++)
                            {
                                list2.Add(i - n/2, finShift[(i - n * n4) * 2]);
                                list3.Add(i - n/2, finShift[(i - n * n4) * 2 + 1]); //Точки для сигнала в частотной области (IQ)
                            }
                    

                    
                        for (int i = 0 + n4 * n; i < n + n4 * n; i++)
                        {
                            list4.Add(i, fout[(i - n * n4) * 2]); 
                            list5.Add(i, fout[(i - n * n4) * 2 + 1]); //Точки для сигнала во временной области (IQ)
                        }
                        
                    
                }
Вопрос - как мне сделать так, чтобы первая часть из 4 графика была окрашена, например, в синий, вторая - в зеленый, третья - в желтый, четвертая - в оранжевый?
Krasi вне форума Ответить с цитированием
Старый 22.10.2015, 22:59   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Ну так задайте параметры графика при создании курвы.
Код:
plSTOH = new PointPairList();
liSTOH = Pane.AddCurve("plFastST", plSTOH, stColor);
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 23.10.2015, 09:26   #3
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Не понимаю. У меня же list - это точки для курвы, я правильно понимаю? Посмотрите внимательнее, потому что до меня не доходит этот момент. В коде я просто получаю точки в list, сначала для первого символа, потом для второго, потом для третьего и для четвертого (n4 = 3). Мне не нужно, чтобы два разных графика у меня различались по цветам. Мне нужно, чтобы когда этот сегмент кода отработал 1 раз
Код:
for (int i = 0 + n4 * n; i < n + n4 * n; i++)
                            {
                                list2.Add(i - n/2, finShift[(i - n * n4) * 2]);
                                list3.Add(i - n/2, finShift[(i - n * n4) * 2 + 1]); //Точки для сигнала в частотной области (IQ)
                            }
Цвета кривых, соответствующих листам 2 и 3, были синий и красный. Но потом, при добавлении в листы следующей четверти графика, цвета должны поменяться на зеленый и черный. И т. д.. Просто у меня барьер здесь в мыслях. Я думаю, проще создать 4 листа и отображать на графике все 4 символа по отдельности. Ваши предложения?
Krasi вне форума Ответить с цитированием
Старый 23.10.2015, 09:42   #4
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Я продвинулся немного, но проблема в том, что я пробую обновлять цвета так:
Код:
for (int i = 0 + n4 * n; i < n + n4 * n; i++)
                        {
                            list4.Add(i, fout[(i - n * n4) * 2]); 
                            list5.Add(i, fout[(i - n * n4) * 2 + 1]); //Точки для сигнала во временной области (IQ)
                            if (n4 == 0) { myCurve4.Color = Color.Blue; myCurve5.Color = Color.Red; }
                            if (n4 == 1) {myCurve4.Color = Color.Black; myCurve5.Color = Color.Green;}
                            if (n4 == 2) { myCurve4.Color = Color.Yellow; myCurve5.Color = Color.Orange; }
                            if (n4 == 3) { myCurve4.Color = Color.Purple; myCurve5.Color = Color.DarkRed; }
                        }
Уже после цикла с n4 у меня обновляются графики - поэтому цвет лишь один - Purple+DarkRed. Я решил обновлять графики раньше, в самом цикле с n4, тогда график стал обновляться в 4 раза чаще, но, в конце концов, он все-равно становится Purple+DarkRed, потому что при изменении цвета меняется цвет всей кривой. Что можно сделать?
Я бы даже создал несколько кривых и листов для каждого кусочка данных из четырех. Но нужно ли это?
Krasi вне форума Ответить с цитированием
Старый 23.10.2015, 10:21   #5
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Сейчас у меня так:
Код:
for (int i = 0 + n4 * n; i < n + n4 * n; i++)
                        {                                                          //Точки для сигнала во временной области (IQ)

                            if (n4 == 0) { list4.Add(i, fout[(i - n * n4) * 2]); list5.Add(i, fout[(i - n * n4) * 2 + 1]); }
                            if (n4 == 1) { list42.Add(i, fout[(i - n * n4) * 2]); list52.Add(i, fout[(i - n * n4) * 2 + 1]); }
                            if (n4 == 2) { list43.Add(i, fout[(i - n * n4) * 2]); list53.Add(i, fout[(i - n * n4) * 2 + 1]); }
                            if (n4 == 3) { list44.Add(i, fout[(i - n * n4) * 2]); list54.Add(i, fout[(i - n * n4) * 2 + 1]); }
                            
                        }
Работает! Но это нормально вообще? Я думаю, есть же путь попроще?
Изображения
Тип файла: jpg Безымянный.jpg (67.3 Кб, 156 просмотров)
Krasi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
var Key Press Delphi - при нажатии на клавиши менять цвет формы Grimnir Помощь студентам 6 29.03.2013 12:00
Как менять цвет слов? (Pascal) _fynjy_ Помощь студентам 4 14.12.2010 15:34
как менять цвет компонента по условию kenta Общие вопросы Delphi 1 20.02.2010 20:53
Можно ли своей функцей менять цвет ячейки в которую эта фу-я вставлена? maeglah Microsoft Office Excel 3 21.04.2009 05:23
Image не хочет цвет менять Roof Компоненты Delphi 3 04.08.2008 01:33