Штрихпунктирная линия совершает движение по прямоугольной спирали до столкновения с краем формы - C#
Формулировка задачи:
Доброго времени суток! Помогите,пожалуйста, сделать штрихпунктирную линию фиксированного размера, которая из центра начинает своё движение по прямоугольной спирали до столкновения с краем формы, после чего исчезает и вновь появляется в центре... Пожалуйста
Решение задачи: «Штрихпунктирная линия совершает движение по прямоугольной спирали до столкновения с краем формы»
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 _4
{
public partial class Form1 : Form
{
public bool draw = false;
Graphics GraphForm;
struct my_line
{
public Point first;
public Point last;
};
my_line my_lines;
public Form1()
{
InitializeComponent();
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
}
private void запускToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!draw)
{
draw = true;
}
timer1.Enabled = true;
}
private void остановкаToolStripMenuItem_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
private void увеличениеToolStripMenuItem_Click(object sender, EventArgs e)
{
if (увеличениеToolStripMenuItem.Text == "Увеличение")
{
увеличениеToolStripMenuItem.Text = "Уменьшение";
}
else
{
увеличениеToolStripMenuItem.Text = "Увеличение";
}
}
private void ускорениеToolStripMenuItem_Click(object sender, EventArgs e)
{
if (ускорениеToolStripMenuItem.Text == "Ускорение")
{
ускорениеToolStripMenuItem.Text = "Замедление";
timer1.Interval /= 4;
}
else
{
ускорениеToolStripMenuItem.Text = "Ускорение";
timer1.Interval *= 4;
}
}
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Выйти?", "Сообщение", MessageBoxButtons.OKCancel) == DialogResult.OK) Close();
}
private void Form1_Load(object sender, EventArgs e)
{
Random rnd = new Random();
progressBar1.Maximum = 24;
progressBar1.Value = 0;
progressBar1.Step = 1;
my_lines = new my_line();
my_lines.first.X = 660;
my_lines.first.Y = 381;
my_lines.last.X = 700;
my_lines.last.Y = 390;
}
private void Form1_DoubleClick(object sender, EventArgs e)
{
Graphics g = panel1.CreateGraphics();
g.DrawString("Лабораторная работа №4 Макрушко Катерины", new Font("Times New Roman", 12), new SolidBrush(Color.Black), 0, 0);
}
private void timer1_Tick(object sender, EventArgs e)
{
Pen p = new Pen(Color.Black, 3);
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
g.DrawLine(p, my_lines.first, my_lines.last);
my_lines.first.X += 50;
my_lines.last.X += 50;
if (progressBar1.Value == progressBar1.Maximum)
{
progressBar1.Value = 0;
}
progressBar1.PerformStep();
this.Refresh();
}
/* private void Form1_Paint(object sender, PaintEventArgs e)
{
Random rnd = new Random();
if (draw)
{
t.draw(e.Graphics, Color.FromArgb(rnd.Next(0,255),rnd.Next(0,255),rnd.Next(0,255)));
}
/* Graphics g = e.Graphics;
Pen p = new Pen(Color.Black, 3);
g.DrawLine(p, 660, 381, 700, 390);
}*/
}
}