Всем здравствуйте!
Реализовал программу, которая строит графики по заданным в файле точкам. Не могу разобраться со следующим:
1)Нужно создать ещё три серии, которые распределяют и отображают координаты так:
в первую серию идут только точки с отрицательной координатой Х,
во вторую серию - с отрицательной координатой Y,
в третью серию – точки с двумя отрицательными координатами.
2)Разделить координаты по двум файлам, в одном Y, в другом X, реализовать построение графика через них.
Всем заранее спасибо!
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
| using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.IO;
namespace LR_2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
comboBox1.SelectedIndex = 2;
}
/// <summary>
/// функция обрабатывает нажатие кнопки button1 ‐ загрузку данных
/// </summary>
private void button1_Click(object sender, EventArgs e)
{
string filename; //строковая переменная для хранения полного пути к файлу с данными
//создание диалогового окна для выбора текстового документа на диске компьютера
OpenFileDialog openFileDialog1 = new OpenFileDialog(){Filter ="Текстовые файлы(*.txt)|*.txt"};
if (openFileDialog1.ShowDialog() != DialogResult.OK) //отображение диалогового окна и проверка не выбран ли файл
return; //если файл не был выбран прерываем функцию
filename = openFileDialog1.FileName; //если пользователь указал файл, то в переменную filename записывается его имя
ReadFile(filename); //вызов функции чтения файла
}
private double[,] Coords;
/// <summary>
/// функция для чтения текстового файла и заполнения массива координат
/// </summary>
/// <param name="file">путь к файлу</param>
public void ReadFile(string file)
{
Coords = new double[15, 2]; //создание массива координат
var sr = new StreamReader(file); //создание потока чтения
string line; //строковая переменная
int point = 0; //номер точки
int ser = 1; //номер серии
while ((line = sr.ReadLine()) != null) //чтение строки line
{
string[] splitLine = line.Split(' '); //разделение строки на элементы по пробелам
Coords[point, 0] = Convert.ToDouble(splitLine[0]); //запись координаты x в массив
Coords[point, 1] = Convert.ToDouble(splitLine[1]); //запись координаты y в массив
if (point % 5 == 0) //в каждой серии по 5 точек
{
string NameSerie = "Серия" + Convert.ToString(ser); //имя серии
checkedListBox1.Items.Add(NameSerie); //добавление в checkedListBox1 имени серии
ser++;
}
point++;
}
}
/// <summary>
/// функция для создания серии
public void CreateSerie(int NumSerie)
{
double x, y;
string NameSerie = "Серия" + Convert.ToString(NumSerie + 1);
//имя серии
chart1.Series.Add(new Series(NameSerie)); //добавление серии в Chart
chart1.Series[NameSerie].ChartType = (System.Windows.Forms.DataVisualization.Charting.SeriesChartType)4; //тип серии
chart1.Series[NameSerie].Enabled = true; //серия активируется
chart1.Series[NameSerie].BorderWidth = 2; //толщина линии
for (int p = 0; p < 5; p++) //цикл для добавления точек с координатами x и y в серию
{
x = Coords[p + NumSerie * 5, 0];
y = Coords[p + NumSerie * 5, 1];
chart1.Series[NameSerie].Points.AddXY(x, y);
}
}
/// <summary>
/// функция обрабатывает нажатие кнопки button2 ‐ отображение графиков
/// </summary>
private void button2_Click(object sender, EventArgs e)
{
chart1.Series.Clear(); //удаление всех серий
for (int i = 0; i < checkedListBox1.Items.Count; i++) //цикл проходит по всем элементам checkedListBox1
{
if (checkedListBox1.GetItemChecked(i))
CreateSerie(i); //если элемент checkedListBox1 отмечен, то строим соответствующую серию
}
}
/// <summary>
/// функция обрабатывает изменение текущего элемента в comboBox1
/// </summary>
private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
int var = comboBox1.SelectedIndex;
if (var == 1) var = 3;
else
if (var == 2) var = 4;
//задается тип для всех серий в Chart
foreach (Series ser in chart1.Series)
ser.ChartType = (System.Windows.Forms.DataVisualization.Charting.SeriesChartType)var;
}
private void Form1_Resize(object sender, EventArgs e)
{
button1.Location = new Point(splitContainer1.Panel1.Width / 2 - 60,
splitContainer1.Panel1.Height / 20 - 8);
label1.Location = new Point(splitContainer1.Panel1.Width / 2 - 67,
splitContainer1.Panel1.Height / 10 + 9);
checkedListBox1.Location = new Point(splitContainer1.Panel1.Width / 2-57,
splitContainer1.Panel1.Height / 5 - 8);
checkedListBox1.Height = splitContainer1.Panel1.Height / 2;
button2.Location = new Point(splitContainer1.Panel1.Width / 2 - 62,
splitContainer1.Panel1.Height - splitContainer1.Panel1.Height / 4-6);
label2.Location = new Point(splitContainer1.Panel1.Width / 2 - 60,
splitContainer1.Panel1.Height - splitContainer1.Panel1.Height / 5 + 13);
comboBox1.Location = new Point(splitContainer1.Panel1.Width / 2 - 60,
splitContainer1.Panel1.Height - splitContainer1.Panel1.Height / 5 + 40);
}
}
} |
|