Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/81: Рейтинг темы: голосов - 81, средняя оценка - 4.93
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
1

Нарисовать график в PictureBox по данным из DGV

02.09.2011, 12:36. Просмотров 15175. Ответов 97
Метки нет (Все метки)

Здравствуйте. Есть форма, на ней датагрид, куда помещаются результаты расчетов. два столбца цифр короче. Как реализовать следующее:
По нажатию кнопки, на этой же форме , рисуется график (например в пикчер боксе) параметр по параметру из этих двух столбцов датагрид.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2011, 12:36
Ответы с готовыми решениями:

В picturebox нарисовать график
Добрые день, подскажите пожалуйста как в picturebox нарисовать график функции...

Статистика по данным из DGV
Ребят, нужна помощь в написании программного кода. На форме имеются DataGrid с...

Не добавляются строки в DGV, если он привязан к данным
Программировать начал не очень давно. И вот столкнулся с такой проблемой. На...

Построить гистограмму выплаты долга по данным из DGV
Доброго времени суток. Никогда раньше не касалась диаграмм в С#. Сейчас мне...

Построить график по значениям выбранной строки DGV
Доброго времени суток) Помогите пожалуйста с задачей. У меня есть...

97
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
04.09.2011, 23:08  [ТС] 21
Проект делаю для себя, для работы. Так что никому мне его защищать не надо. А так я полный чайник. Могу и на простых вещах тупить. Вот по форумам советы спрашиваю. Что то сам, что то с помощью, потихоньку рожаю.Главнейшая проблема - не знаю английского. Благодарен за любую помощь.

Собственно вот проект. Студия 2008
На форме текстбоксы для ввода начальных условий, датагрид, 5 панелей и 4 кнопки.
По нажатию кнопки расчет - решается система уравнений и результаты пишутся в датагрид в виде 6 параметров. 5 из них зависят от одного t. По нажатию на таблица - содержимое датагрид и текстбоксов уходит в екзель. По нажатию на кнопку график - в 5 панелях рисуются 5 графиков: каждый параметр от t.

Вот такой проект. Прошу помочь довести до ума.
0
Вложения
Тип файла: rar рас1.rar (680.4 Кб, 48 просмотров)
almazsr
233 / 170 / 25
Регистрация: 13.11.2010
Сообщений: 425
04.09.2011, 23:29 22
nikozavr, ваш код просто издевательство. Приведите его в порядок с точки зрения комментариев, отступов и пустых строк.
2
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
04.09.2011, 23:31  [ТС] 23
А по существу вопроса?
0
I2um1
Злой няш
1408 / 1106 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
05.09.2011, 02:32 24
Цитата Сообщение от almazsr Посмотреть сообщение
nikozavr, ваш код просто издевательство. Приведите его в порядок с точки зрения комментариев, отступов и пустых строк.

Не по теме:

Это самое оно и главная причина тому, почему я сижу на этом форуме. Так сказать нарабатываю скилл читать чужие безобразные коды.


По поводу отступов: открывайте криворукий файл с кодом и нажимайте Ctrl+D или в пункте меню Edit->Advanced->Format Document.

Теперь решение:
Добавляете к using'ам такое:
C#
1
using System.Linq;
Модифицируем класс MyData
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Класс, в котором хранятся данные.
class MyData
{
    public double T { get; set; }
    public double Q { get; set; }
    public double H { get; set; }
    public double Psy { get; set; }
    public double X { get; set; }
    public double Z { get; set; }
    public MyData(double t, double Q, double H, double Psy, double X, double Z)
    {
        this.T = t;
        this.Q = Q;
        this.H = H;
        this.Psy = Psy;
        this.X = X;
        this.Z = Z;
    }
    // Учим класс обращает к свойству по индексу:
    public double this[string index]
    {
        get
        {
            switch (index)
            {
                case "T": return T;
                case "Q": return Q;
                case "H": return H;
                case "Psy": return Psy;
                case "X": return X;
                case "Z": return Z;
                default: return 0;
            }
        }
    }
}

В класс формы Form1 дописываем следующий код:
Код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
        // Вынес вообще отдельно от Draw:
        Pen pen = new Pen(new SolidBrush(Color.Red), 2f); // Рисую график толстыми красными линиями.
        Pen grid = new Pen(new SolidBrush(Color.Black), 1f); // Рисую ось черными линиями.
        Graphics graphics; // Рисую график на Panel.
 
        // Сам метод, который рисует график:
        void Draw(Panel panel, string xIndex, string yIndex)
        {
            // Поиск минимума и максимума по x и y.
            float xMin = Convert.ToSingle(list.Select(node => node[xIndex]).Min());
            float xMax = Convert.ToSingle(list.Select(node => node[xIndex]).Max());
            float yMin = Convert.ToSingle(list.Select(node => node[yIndex]).Min());
            float yMax = Convert.ToSingle(list.Select(node => node[yIndex]).Max());
 
            // Вычисляем необходимый масштаб.
            float scaleX = panel.Width / (xMax - xMin);
            float scaleY = panel.Height / (yMax - yMin);
 
            // Беру модуль для минимальных значений
            xMin = xMin < 0 ? -xMin : xMin;
            yMin = yMin < 0 ? -yMin : yMin;
 
            graphics = panel.CreateGraphics();
            graphics.Clear(panel.BackColor); // Стираем то, что было.
 
            // Рисую ось:
            graphics.DrawLine(grid, xMin * scaleX, 0, xMin * scaleX, panel.Height);
            graphics.DrawLine(grid, 0, yMin * scaleY, panel.Width, yMin * scaleY);
 
            for (int i = 1; i < list.Count; i++) // Рисую сам график по точкам.
                graphics.DrawLine(pen,
                    (Convert.ToSingle(list[i - 1][xIndex]) + xMin) * scaleX,
                    panel.Height - (Convert.ToSingle(list[i - 1][yIndex]) + yMin) * scaleY,
                    (Convert.ToSingle(list[i][xIndex]) + xMin) * scaleX,
                    panel.Height - (Convert.ToSingle(list[i][yIndex]) + yMin) * scaleY);
        }

Так, а теперь обработчик события нажатия самой кнопки:
Обработчик
C#
1
2
3
4
5
6
7
8
9
10
        // Кнопка "График":
        private void button4_Click_1(object sender, EventArgs e)
        {
            // Сначало "где рисую", потом "что рисую по X", потом "что рисую по Y":
            Draw(panel1, "T", "Q");
            Draw(panel2, "T", "H");
            Draw(panel3, "T", "Psy");
            Draw(panel4, "T", "X");
            Draw(panel5, "T", "Z");
        }

А теперь сравните с тем, что вы там натворили.
Теперь некоторые нюансы:
- вот это я оставил:
C#
1
2
3
            // Вычисляем необходимый масштаб.
            float scaleX = panel.Width / (xMax - xMin);
            float scaleY = panel.Height / (yMax - yMin);
(это значит, что не надо делать такие графики, где xMax = xMin и yMax = yMin)
- алгоритм как видите остался тот же;
- "оцифровку" графика делаете сами - для этого берете любую книгу по C# с разделом GDI+ и изучаете.
- вбил от балды значения и вот такой результат:
Нарисовать график в PictureBox по данным из DGV

(беглая проверка показала, что все сходится, причем я ваш метод рунге-кутта вообще не понимаю)
Недочеты
Так, а теперь грубейшие ошибки:
- Очень плохое знание языка программирования C#. Берете какую-нибудь умную книжку и читаете. Например тот же Шилдт. И не просто читаете, а еще параллельно выполняете на практике и осмысливаете примеры с книги. (обращайте внимание на версию framework при выборе книги: у вас 3.5, сейчас уже есть 4.0). Где-то первые 1-2 десятка глав с книги вы должны понимать интуитивно.
- Интерфейс сделан криво, очень криво. Берете к примеру листик и карандаш и там рисуете интерфейс вашей программы. Далее задаете прям на бумаге предпочитаемые координаты и размеры всех элементов. После чего даете им имена все на той же бумаге. И только потом открываете проект и переносите все с листика на форму.
- Читаете какую-нибудь умную книжку об архитектуре программного обеспечения. После познания азов , берете все те же наши любимые листик и карандаш и рисуете архитектуру классов, описываете словами их поведение, свойства, нужные методы, поля. И только потом кодируете.
- Код же вы пишите вообще не оптимально нарушая все принципы программирование, к примеру такие как "дублирование кода" и т.п.. Забудьте вообще про copy-past. Называйте так же осмысленно переменные, всякие там названия textBox100500 и st89 вообще не о чем не говорят и даже вы сами их где-то через неделю забудете.

Косяки в коде
Сколько не тыкай вас на одни и те же ошибки, вы все глубже в них углубляетесь:
- на кой вы столько промежуточных переменных по-создавали?
C#
1
double fy, k, k0, k1, k2, k3, fy2, l, l0, l1, l2, l3, fy3, m, m0, m1, m2, m3, fy4, s, s0, s1, s2, s3, fy5, d, d0, d1, d2, d3;
(я бы спокойно обошелся с 5-7)
- такой кусок когда меня вообще напрягает, мне бы раньше преподаватель по программированию влепил бы пару не задумываясь, увидев бы такое:
C#
1
2
3
4
5
6
7
8
9
10
11
if (!double.TryParse(textBox1.Text, out h)) h = 0;
            if (!double.TryParse(textBox2.Text, out n)) n = 0;
            if (!double.TryParse(textBox3.Text, out t)) t = 0;
            if (!double.TryParse(textBox4.Text, out Q)) Q = 0;
            if (!double.TryParse(textBox5.Text, out V)) V = 0;
            if (!double.TryParse(textBox6.Text, out ny)) ny = 0;
            if (!double.TryParse(textBox7.Text, out j)) j = 0;
            if (!double.TryParse(textBox8.Text, out H)) H = 0;
            if (!double.TryParse(textBox9.Text, out Psy)) Psy = 0;
            if (!double.TryParse(textBox10.Text, out X)) X = 0;
            if (!double.TryParse(textBox11.Text, out Z)) Z = 0;
- я смотрю с множественным присвоением вы вообще не дружите:
C#
1
2
3
            V = Convert.ToDouble(textBox5.Text);
            ny = Convert.ToDouble(textBox5.Text);
            j = Convert.ToDouble(textBox5.Text);
такой код спокойно заменяется на:
C#
1
V = ny = j = Convert.ToDouble(textBox5.Text);
- ну вы и на создавали разнообразных MyFunc, учите что такое лямбда-выражения из умной книжки, эти все функции спокойно записываются в одну строчку без всяких промежуточных переменных и вычислений.
- такая запись и ей подобные спокойно сокращается:
C#
1
Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
на:
C#
1
Workbook ObjWorkBook;
добавив к using'а поле имен Microsoft.Office.Interop.Excel.
- это:
C#
1
2
3
4
5
6
7
8
9
10
11
ObjWorkSheet.Cells[2, 1] = label1.Text;
            ObjWorkSheet.Cells[2, 2] = label2.Text;
            ObjWorkSheet.Cells[2, 3] = label3.Text;
            ObjWorkSheet.Cells[2, 4] = label4.Text;
            ObjWorkSheet.Cells[2, 5] = label6.Text;
            ObjWorkSheet.Cells[2, 6] = label7.Text;
            ObjWorkSheet.Cells[2, 7] = label5.Text;
            ObjWorkSheet.Cells[2, 8] = label8.Text;
            ObjWorkSheet.Cells[2, 9] = label9.Text;
            ObjWorkSheet.Cells[2, 10] = label10.Text;
            ObjWorkSheet.Cells[2, 11] = label11.Text;
и то, что ниже, спокойно можно записать циклом в две строчки.
- сюда:
C#
1
2
3
4
5
6
7
8
9
for (int i = 0; i < list.Count; i++)
            {
                ObjWorkSheet.Cells[i + 5, 3] = list[i].T;
                ObjWorkSheet.Cells[i + 5, 4] = list[i].Q;
                ObjWorkSheet.Cells[i + 5, 8] = list[i].H;
                ObjWorkSheet.Cells[i + 5, 9] = list[i].Psy;
                ObjWorkSheet.Cells[i + 5, 10] = list[i].X;
                ObjWorkSheet.Cells[i + 5, 11] = list[i].Z;
            }
можно дописать еще один цикл, благодаря моей модернизации класса MyData, тем самым сократив этот код до трех строчек.

Жуть, этот проект по моим меркам вообще крошечный. А тот код, что вы там понаписали, спокойно сокращает где-то в 10-12 раз.

Так же вот такой еще вариант решения: вот вы генерируете электронный документ. Так вот вопрос: а не проще ли было рисовать графики вот в этом документе, а не на форме? - так же графики можно выдрать с этого документа в виде картинок и поместить на форме. Как? - Читайте нужную литературу.

P.S. Код в решении написал очень прозрачно, даже задокументировал комментариями. Если какая-то конструкция непонятна, то берете книгу по программированию на C# и читаете пока не найдете похожий кусок кода, а вот потом изучаете, а не просто на него смотрите, чтобы смогли дальше дописать какой-нибудь дополнительный наворот.
P.S.S. Так же не помешало бы улучшить интерфейс, сделав кнопки "График" и "Таблица" недоступными (у кнопки свойство Enable), если в таблице нет данных - и это логично.
1
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
05.09.2011, 12:07  [ТС] 25
Спасибо, буду дальше разбираться. А книги читаю, но не понимаю без практики.
Почему Вам не понятен мой метод рунге кута?
0
almazsr
233 / 170 / 25
Регистрация: 13.11.2010
Сообщений: 425
05.09.2011, 20:55 26
Метод Рунге-Кутта вроде правильный, но очень негибкий, мягко говоря. Советую вам факторизовать код с помощью доп. методов и кое-где поставить #regionы.
1
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
05.09.2011, 23:28  [ТС] 27
Честно говоря, я встречал регионы в кодах различных товарищей, но не понимаю. Буду благодарен за ликбез про регионы или ссылку на ликбез про регионы для самых маленьких...
Представьте пожалуйста как бы выглядела реализация метода рунге кута в вашем исполнении, желательно с комментариями.
0
FakiR
Level 2
396 / 270 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
Завершенные тесты: 1
06.09.2011, 01:16 28
Ну region'ы используются для объединения кусков кода в блоки. Для собственного удобства (так код просто лучше смотрится). Да и если сторонний человек видит ваш код, то он сразу может понять где, что и как.
ИМХО.

P.S. - Если вас интересует информация по каким-либо компонентам, директивам или др., заходите на msdn и читайте.
http://msdn.microsoft.com/ru-ru/library/9a1ybwek.aspx
0
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
16.09.2011, 21:18  [ТС] 29
Blood-Angel, У Вас не учтено, что параметры, по которым строятся графики (кроме т) имеют разный порядок. например тета = 5, а Н = 8000

Ну и кажется Вы не учли, что начало координат в левом верхнем углу.
И черточки не могу нарисовать на осях...
0
I2um1
Злой няш
1408 / 1106 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
16.09.2011, 22:11 30
nikozavr, я исправил только тот код, что вы там понаписали.

Цитата Сообщение от nikozavr Посмотреть сообщение
графики (кроме т) имеют разный порядок. например тета = 5, а Н = 8000
Это я вообще не понял, график строится по тем значениям, что находятся в таблице. Это по факту функция ломанной, которая зависит от x и y.
Даже в коде написано же, что вызывается метод Draw, в который передается панель, на которой надо рисовать, и какие столбцы с таблицы должны соответствовать x и y для ломанной.

Цитата Сообщение от nikozavr Посмотреть сообщение
Ну и кажется Вы не учли, что начало координат в левом верхнем углу.
Учел я это, если не верите, то сверьте значения, находящиеся в таблице и график, который нарисован справа.
Да и в коде гляньте. В конце метода Draw написано же (причем два раза): panel.Height - ...

Цитата Сообщение от nikozavr Посмотреть сообщение
И черточки не могу нарисовать на осях...
Чтобы их нарисовать, надо формулу вывести. Для начала не глядя на тот код, что я написал, попробуйте сами нарисовать график и ось координат, тогда вы поймете как нарисовать эти черточки. По этому поводу читайте книгу "Программирование для Microsoft Windows на C#. В 2-х томах." Чарльза Петцольда.
0
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
16.09.2011, 22:36  [ТС] 31
Не помню у этого автора про графики. Еще посмотрю.


введите на форме:

Н = 8000
V = 500
Q = 5
ny =2
j = 45
Psy = 123

Посмотрите, нарисуются 2 графика и все.

Добавлено через 1 минуту
C#
1
2
3
4
5
6
 for (int i = 1; i < list.Count; i++) // Рисую сам график по точкам.
                graphics.DrawLine(pen,
                    (Convert.ToSingle(list[i - 1][xIndex]) + xMin) * scaleX,
                    panel.Height - (Convert.ToSingle(list[i - 1][yIndex]) + yMin) * scaleY,
                    (Convert.ToSingle(list[i][xIndex]) + xMin) * scaleX,
                    panel.Height - (Convert.ToSingle(list[i][yIndex]) + yMin) * scaleY);
Если тут дописать знак - у yMin, то дело улучшается.
0
I2um1
Злой няш
1408 / 1106 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
16.09.2011, 23:02 32
А что не так?
Нарисовать график в PictureBox по данным из DGV

Для f(T, Q) - функция по y убывает, по x растет.
Для f(T, H) - функция по y убывает, по x растет.
Для f(T, Psy) - функция по y растет, по x растет.
Для f(T, X) - функция по y убывает, по x растет.
Для f(T, Z) - функция по y убывает, по x растет.
Сверьте значения, возьмите например равномерно 10 значений с таблицу, например для f(T, Q) и постройте график на листике, после чего сверьте с тем, что отображается на первой панели вверху справа.


Цитата Сообщение от nikozavr Посмотреть сообщение
Если тут дописать знак - у yMin, то дело улучшается.
Та вроде правильная у меня формула.
0
almazsr
233 / 170 / 25
Регистрация: 13.11.2010
Сообщений: 425
17.09.2011, 08:59 33
Blood-Angel, и че, прям всегда линейная зависимость?
Все функции зависят от t.
0
I2um1
Злой няш
1408 / 1106 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
17.09.2011, 09:59 34
Цитата Сообщение от almazsr Посмотреть сообщение
Blood-Angel, и че, прям всегда линейная зависимость?
Все функции зависят от t.
А там на графике не линейная зависимость, то оно так смотрится только. На самом деле там ломанная. И функции зависят от двух аргументов, причем в каждой первый аргумент t (по оси x).
Да и не я вгонял эти значения в таблицу (в смысле формулы для ее заполнения не писал), а просто построил график исходя из этих данных (не задумываясь что такое "метод рунге-кутта" - а оно и не надо, чтобы построить график по точкам). Тот самый первый пример (смотреть в этой теме мое первое сообщение с демонстрацией), который я демонстрировал, рисует график синуса (я ничего не менял). Так что проблема в том, какие значения загоняются в таблицу - и это доказать очень легко, например, добавив в таблицу где-то в средине левую точку и глянуть что случится с графиком:
Нарисовать график в PictureBox по данным из DGV

Про то "как оно рисуется", я уже говорил: берутся две точки и проводится между ними прямая.
0
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
17.09.2011, 14:33  [ТС] 35
Blood-Angel? H0 = 8000, а не h
0
I2um1
Злой няш
1408 / 1106 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
17.09.2011, 17:17 36
Цитата Сообщение от nikozavr Посмотреть сообщение
Blood-Angel? H0 = 8000, а не h
Хм~, оказывается есть случай, когда знак не так смещает отображаемую часть при масштабировании.
Исправьте метод Draw на:
Метод Draw
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Сам метод, который рисует график:
        void Draw(Panel panel, string xIndex, string yIndex)
        {
            bindingSource1.ResetBindings(true);
            // Поиск минимума и максимума по x и y.
            float xMin = Convert.ToSingle(list.Select(node => node[xIndex]).Min());
            float xMax = Convert.ToSingle(list.Select(node => node[xIndex]).Max());
            float yMin = Convert.ToSingle(list.Select(node => node[yIndex]).Min());
            float yMax = Convert.ToSingle(list.Select(node => node[yIndex]).Max());
 
            // Вычисляем необходимый масштаб.
            float scaleX = panel.Width / (Math.Abs(xMax) + Math.Abs(xMin));
            float scaleY = panel.Height / (Math.Abs(yMax) + Math.Abs(yMin));
            
 
            // Беру модуль для минимальных значений.
            xMin = xMin < 0 ? -xMin : xMin;
            yMin = yMin < 0 ? -yMin : yMin;
 
            graphics = panel.CreateGraphics();
            graphics.Clear(panel.BackColor); // Стираем то, что было.
 
            // Рисую ось:
            graphics.DrawLine(grid, xMin * scaleX, 0, xMin * scaleX, panel.Height);
            graphics.DrawLine(grid, 0, panel.Height - yMin * scaleY, panel.Width, panel.Height - yMin * scaleY);
 
            for (int i = 1; i < list.Count; i++) // Рисую сам график по точкам.
                graphics.DrawLine(pen,
                    (Convert.ToSingle(list[i - 1][xIndex]) + xMin) * scaleX,
                    panel.Height - (Convert.ToSingle(list[i - 1][yIndex]) + yMin) * scaleY,
                    (Convert.ToSingle(list[i][xIndex]) + xMin) * scaleX,
                    panel.Height - (Convert.ToSingle(list[i][yIndex]) + yMin) * scaleY);
        }

Еще исправил ось по y, которая выводилась не с той стороны. Сам же график рисуется так, как и рисовался прежде.
0
Миниатюры
Нарисовать график в PictureBox по данным из DGV  
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
17.09.2011, 19:21  [ТС] 37
Почему float? Почему не дабл используете?

Добавлено через 1 час 16 минут
Цитата Сообщение от almazsr Посмотреть сообщение
Blood-Angel, и че, прям всегда линейная зависимость?
Все функции зависят от t.
Они не зависят от т, они изменяются по времени.
0
almazsr
233 / 170 / 25
Регистрация: 13.11.2010
Сообщений: 425
17.09.2011, 20:52 38
Цитата Сообщение от nikozavr Посмотреть сообщение
Почему float? Почему не дабл используете?
лучше double. он точнее.
Цитата Сообщение от nikozavr Посмотреть сообщение
Они не зависят от т, они изменяются по времени.
Вы хоть поняли, что сказали?
0
I2um1
Злой няш
1408 / 1106 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
17.09.2011, 20:54 39
Цитата Сообщение от nikozavr Посмотреть сообщение
Почему float? Почему не дабл используете?
Потому что рисовать можно в gdi+ только через float или int, а вообще читайте книгу Петцольда и не задавайте такие вопросы. А если хотите рисовать через double, то учите WPF.
0
nikozavr
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
18.09.2011, 12:54  [ТС] 40
Если при вводе этих же данных поставить Q = - 5 Psy = - 123 То не рисуются графики.

Н = 8000
V = 500
Q = 5
ny =2
j = 45
Psy = 123
0
18.09.2011, 12:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2011, 12:54

График по рассчитанным данным
В общем на форме исходные данные в текстбоксах. Есть кнопка - нажимаю и...

Нарисовать в PictureBox
Добрый день. Есть такая функция на JS var canvas =...

График chart по данным excel
Как связать chart и excel в с# чтобы по выбору столбцов строился график? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru