Создать массив линий разных размеров - 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();//мышь наведи почитай
        }
    }
}//усё

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы