Создать массив линий разных размеров - C#
Формулировка задачи:
можно ли создать массив линий, тоесть массив в котором будут линии нарисованные(drawline) но разных размеров?
Решение задачи: «Создать массив линий разных размеров»
textual
Листинг программы
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DrawLines { //класс линии public class _Line { PointF start;//первая точка PointF end;//вторая точка Pen pen;//перо, кот рисуется линия /// <summary> /// конструктор /// </summary> /// <param name="start"> точка1 </param> /// <param name="end"> точка 2 </param> /// <param name="pen"> перо </param> public _Line(PointF start, PointF end,Pen pen) { this.start = start; this.end = end; this.pen = pen; } /// <summary> /// свойство. возвращает координату Х первой точки /// </summary> public float StartX { get { return start.X; } set { start.X = value; } } /// <summary> /// свойство. возвращает координату У первой точки /// </summary> public float StartY { get { return start.Y; } set { start.Y = value; } } /// <summary> /// свойство. возвращает координату Х второй точки /// </summary> public float EndX { get { return end.X; } set { end.X = value; } } /// <summary> /// свойство. возвращает координату У второй точки /// </summary> public float EndY { get { return end.Y; } set { end.Y = value; } } /// <summary> /// возвращает длину линии /// </summary> public double Lenght { get { return Math.Sqrt(Math.Pow((end.X - start.X), 2) + Math.Pow((end.Y - start.Y), 2)); } } /// <summary> /// рисует линию /// </summary> /// <param name="graphics"> графический объект </param> public void Draw(Graphics graphics) { graphics.DrawLine(pen, start, end); } } public partial class Form1 : Form { Panel panel;//панель Timer timer;//таймер Graphics graphics;//граф объект BufferedGraphics bufferedGraphics;//граф буффер BufferedGraphicsContext bufferedGraphicsContext;//контекст) List<_Line> Lines; //наш список с линиями public Form1() { InitializeComponent(); //устанавливаем размеры формы ClientSize = new System.Drawing.Size(450, 450); //создаем панель panel = new Panel(); panel.Location = new Point(5, 5); panel.Size = new Size(ClientSize.Width - 10, ClientSize.Height - 10); Controls.Add(panel); //созд таймер timer = new Timer(); timer.Interval = 1; timer.Tick += new EventHandler(timer_Tick); //инициализируем графику(см метод ниже) InitializeGraphics(); Random rnd=new Random(); //создаем список линий Lines = new List<_Line>(); int x = 10; //забиваем список линиями for (int i = 0; i < 200; i++) { PointF start = new PointF(x, 400); PointF end = new PointF(x, rnd.Next(400)); _Line line = new _Line(start, end, new Pen(Color.Red)); Lines.Add(line); x += 2; } timer.Start(); } private void InitializeGraphics() { //открываем графику на панели graphics = panel.CreateGraphics(); bufferedGraphicsContext = new BufferedGraphicsContext(); bufferedGraphics = bufferedGraphicsContext.Allocate(graphics, new Rectangle(0, 0, panel.Width, panel.Height)); } int currentLine;//счетчик линий void timer_Tick(object sender, EventArgs e) { //рисуем все из буффера(метод ниже) DrawToBuffer(); //сортируем по 1 каждую милисекунду if (currentLine < Lines.Count - 1) { if (Lines[currentLine].Lenght > Lines[currentLine + 1].Lenght) { _Line tLine = Lines[currentLine]; Lines[currentLine] = Lines[currentLine + 1]; Lines[currentLine + 1] = tLine; } currentLine++; } else currentLine = 0; } private void DrawToBuffer() { //чистим буффер bufferedGraphics.Graphics.Clear(Color.White); int x = 10; for (int i = 0; i < Lines.Count; i++) { //меняем координаты Х всех точек(при сортировке координаты не менялись,менялись только линии(местами переставляли))) Lines[i].StartX = Lines[i].EndX = x; //рисуем линию Lines[i].Draw(bufferedGraphics.Graphics); x += 2; } bufferedGraphics.Render();//мышь наведи почитай } } }//усё
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д