
Среда программирования:
Visual Studio 2010
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; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { //Инициализация bitmap и графики private Bitmap Splittindisk; private Graphics g; //Создаем объекты для закрашивания фигур SolidBrush black = new SolidBrush(Color.Black); SolidBrush white = new SolidBrush(Color.White); Pen blackpen = new Pen(Color.Black, 1); //определяем положение полуокружности int x = 0, y = 190; //смещение по y для прорисовки полос на разных уровнях int deltay = 44; //шаг смещения по x int speed = 0; //диаметр окружности int d = 50; //радиальные линии, образующие сектор (в нашем случае полуокружность) int angle1 = 0; int angle2 = 180; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //вызываем функцию таймера timer1.Start(); } private void pictureBox1_Click(object sender, EventArgs e) { } //функция для рисования движущихся полос private void Draw(int speed) { //Создаем bitmap и графику из bitmap Splittindisk = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics g = Graphics.FromImage(Splittindisk); //Сглаживание для графики g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //прорисовка центральной полоски, которая не двигается; для этого в цикле рисуем полуокружности for (int i = -50; i < 50; i++) { //прорисовка нижней полуокружности g.FillPie(black, x + d * i, y, d, d, angle1, angle2); g.DrawPie(blackpen, x + d * i, y, d, d, angle1, angle2); //прорисовка верхней полуокружности g.FillPie(black, x + d * i + d / 2, y + deltay, d, d, angle2, angle2); g.DrawPie(blackpen, x + d * i + d / 2, y + deltay, d, d, angle2, angle2); } //теперь рисуем такие же полосы ниже и выше неподвижной полосы for (int k = 1; k <= 5; k++) { //нечетные полосы дополнительно будем смещать, чтобы полуокружности из разных уровней совпадали в одну окружность int shift = 0; if (k % 2 != 0) shift = 1; //смещение каждой полосы происходит на диаметр относительно предыдущего уровня //рисование полосы, которая находится выше неподвижной. верхние полосы двигаются влево for (int i = -50; i < 50; i++) { g.FillPie(black, x + d * i - (d/2) * shift - speed * k, y - deltay * k, d, d, angle1, angle2); g.DrawPie(blackpen, x + d * i - (d/2) * shift - speed * k, y - deltay * k, d, d, angle1, angle2); g.FillPie(black, x + d * i - (d/2) * shift + d / 2 - speed * k, y - deltay * (k - 1), d, d, angle2, angle2); g.DrawPie(blackpen, x + d * i - (d / 2) * shift + d / 2 - speed * k, y - deltay * (k - 1), d, d, angle2, angle2); } //рисование полосы, которая находится ниже неподвижной. нижние полосы двигаются вправо for (int i = -50; i < 50; i++) { g.FillPie(black, x + d * i + (d / 2) * shift + speed * k, y + deltay * k, d, d, angle1, angle2); g.DrawPie(blackpen, x + d * i + (d / 2) * shift + speed * k, y + deltay * k, d, d, angle1, angle2); g.FillPie(black, x + d * i + (d / 2) * shift + d / 2 + speed * k, y + deltay * (k + 1), d, d, angle2, angle2); g.DrawPie(blackpen, x + d * i + (d / 2) * shift + d / 2 + speed * k, y + deltay * (k + 1), d, d, angle2, angle2); } } } private void timer1_Tick(object sender, EventArgs e) { //Создаем bitmap и графику из bitmap Splittindisk = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics g = Graphics.FromImage(Splittindisk); //Сглаживание для графики g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //заливка фона белым цветом g.FillRectangle(white, 0, 0, pictureBox1.Width, pictureBox1.Height); //увеличиваем шаг speed+=2; //если шаг смещения равен диаметру, то полуокружности совпали в окружность. задержим их в таком положении и обнулим шаг if (speed == d) { speed = 0; Thread.Sleep(700); } //вызываем функцию прорисовки с заданным шагом Draw(speed); //отображаем bitmap на PictureBox pictureBox1.BackgroundImage = Splittindisk; } } }
Прикрепленный файл | Размер |
---|---|
Yakubova_Splittin_disks.rar | 76.9 кб |