Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ZedGraph 
:(
    Опции темы
Ronin08
Дата 2.4.2008, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

Репутация: 1
Всего: 1



эта тема напрямую связана с этой 
те кто использует ZedGraph (кампонент для работы с графиками) могут помочь
необходимо построить график зависимости время просчета матрицы от колличества потоков
Вот код
Код

using ZedGraph;
using System.Threading;

namespace Graphics
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();           
        }
               
        private void button1_Click(object sender, EventArgs e)
        {            
            int n = Convert.ToInt32(nummatr.Text);           //Размерность матрицы
            ArrayTwo.threadcount = Convert.ToInt32(numpot.Text);  //Количество потоков
            int[,] Arr1 = new int[n, n];
            ArrayTwo.CreateTwoDimAr(Arr1);
            
            int[,] Arr2 = new int[n, n];
            ArrayTwo.CreateTwoDimAr(Arr2);
            int[,] Arr3 = new int[n, n];

            ArrayTwo.MultyMatrix(ArrayTwo.threadcount, Arr1, Arr2, Arr3);
            CreateGraph_GradientByZBars(zg1);
            SetSize();  
         }

                 
        public void CreateGraph_GradientByZBars(ZedGraphControl zg1)
        {
            GraphPane myPane = zg1.GraphPane;
            myPane.Title.Text = "График зависимости";
            myPane.XAxis.Title.Text = "Потоки";
            myPane.YAxis.Title.Text = "Время";

            // Make up some data arrays based on the Sine function
           
            PointPairList list1 = new PointPairList();
            PointPairList list2 = new PointPairList();
           
            for (int pot = 0; pot < ArrayTwo.threadcount; pot++)
            {
                int x = pot;
                int y1 = ArrayTwo.timeres;
                list1.Add(x, y1);                
            }
            
            // Generate a blue curve with circle
            // symbols, and "Piper" in the legend
            LineItem myCurve2 = myPane.AddCurve("",
                  list1, Color.Blue, SymbolType.Circle);

            // Tell ZedGraph to refigure the
            // axes since the data have changed
            zg1.AxisChange();           
           
        }
            public void Form1_Resize(object sender, EventArgs e)
            {
                SetSize();
            }

            public void SetSize()
            {
                zg1.Location = new Point(10, 75);
                // Leave a small margin around the outside of the control
                zg1.Size = new Size(this.ClientRectangle.Width - 20, this.ClientRectangle.Height - 80);
            }          
        }     
          
        class ArrayTwo
        {
            private static Random rnd = new Random();

            public static void CreateTwoDimAr(int[,] A)
            {
                for (int i = 0; i < A.GetLength(0); i++)
                {
                    for (int j = 0; j < A.GetLength(1); j++)
                    {
                        A[i, j] = rnd.Next(1, 100);
                    }
                }
            }
           
            public static int timeres;
            public static int threadcount;

            public static void MultyMatrix(int pot, int[,] A, int[,] B, int[,] C)
            {
                int threadCount = pot;  //Количество потоков

                int time1, time2;
                time1 = System.Environment.TickCount;

                int len = A.GetLength(0);        
                int range = len / ArrayTwo.threadcount; // кол-во векторов на кажный поток

                Thread thread;

                int begin = 0;
                int end = 0;
                for (int i = 0; i < threadCount - 1; i++)
                {
                    end = begin + range;
                    thread = new Thread(new ParameterizedThreadStart(Potok));
                    thread.Start(new object[] { begin, end, A, B, C });
                    begin = end;
                }
                //Для последнего потока
                thread = new Thread(new ParameterizedThreadStart(Potok));
                thread.Start(new object[] { end, len, A, B, C });
                time2 = System.Environment.TickCount;
                ArrayTwo.timeres = time2 - time1;   
            }

            public static void Potok(object obj)
            {
                object[] arr = (object[])obj;
                int begin = (int)arr[0];
                int end = (int)arr[1];
                int[,] A = (int[,])arr[2];
                int[,] B = (int[,])arr[3];
                int[,] C = (int[,])arr[4];
                int len = A.GetLength(1);

                for (int i = begin; i < end; i++)
                {
                    for (int j = 0; j < len; j++)
                    {

                        int res = 0;
                        for (int k = 0; k < len; k++)
                        {
                            res += A[i, k] * B[k, j];
                        }
                        C[i, j] = res;
                    }                   
                }
            }   
    }
}


это место абсолютно не правильно
Код

 for (int pot = 0; pot < ArrayTwo.threadcount; pot++)
            {
                int x = pot;
                int y1 = ArrayTwo.timeres;
                list1.Add(x, y1);                
            }

но я не знаю как надо связать  ArrayTwo.threadcount с ArrayTwo.timeres;


Это сообщение отредактировал(а) Ronin08 - 2.4.2008, 00:30
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
mr.DUDA
Дата 2.4.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Если timeres имеет тип TimeSpan, получить какое-то числовое значение для вывода на график можно так: ArrayTwo.timeres.TotalMilliseconds или так: ArrayTwo.timeres.TotalSeconds


--------------------
user posted image
PM MAIL WWW   Вверх
Alekz
Дата 2.4.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

Репутация: 1
Всего: 2



Пожалуйста кинь проект полностью. Трудновато всю картину охватить)
PM MAIL   Вверх
Ronin08
Дата 2.4.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

Репутация: 1
Всего: 1



весь проект не получится так как он многова-то весит smile 
ZedGraphControl- это эл-т управления для работы с графиками
код формы я выложил

Добавлено через 10 минут и 57 секунд
Постараюсь подробне описать проблему:
В обработчеке событий button1_Click
Код

ArrayTwo.MultyMatrix(ArrayTwo.threadcount, Arr1, Arr2, Arr3);
CreateGraph_GradientByZBars(zg1);
SetSize(); 

Мне нужно брать в цикле через ArrayTwo.threadcount=ArrayTwo.threadcount+20  из ArrayTwo.MultyMatrix() два значения:
ArrayTwo.threadcount и ArrayTwo.timeres и отображать их на графике

Это сообщение отредактировал(а) Ronin08 - 2.4.2008, 10:55

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Form1.cs 5,14 Kb
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.