Среда программирования:
Visual Studio 2013
using System; using System.Drawing; using System.Windows.Forms; namespace Waves { public partial class Form1 : Form { //Число пи private const double pi = 3.1416; //Инициализация bitmap private Bitmap Waves; //Инициализация графики private Graphics graph; //Массив начальных кружков каждого ряда волн, хранящий координаты центров окружностей для вращения private int[,] Circles = new int[15,2] { {0,0},{30,30},{0,60},{30,90},{0,120}, {30,150},{0,180},{30,210},{0,240},{30,270}, {0,300},{30,330},{0,360},{25,390},{0,420} }; //Массив углов кружков private double[] Circle_Angles = new double[15]; public Form1() { InitializeComponent(); } //Рисования кружков на рядах между первым и последним private void DrawCircles(int x, int y) { Pen myPen = new Pen(Color.White, 5); SolidBrush Circle = new SolidBrush(Color.Black); for(int i = 1; i<10; i++) { //Прорисовка всех кружков в ряду graph.FillEllipse(Circle, (int)x+i*60, (int)y, 60, 60); graph.DrawEllipse(myPen, (int)x+i*60, (int)y, 60, 60); } //Прорисовка кружка выходящего за пределы экрана graph.FillEllipse(Circle, (int)x - 60, (int)y, 60, 60); graph.DrawEllipse(myPen, (int)x - 60, (int)y, 60, 60); } //Рисование кружков в первых рядах(выходящих за пределы экрана) private void DrawCirclesTop(int x0, int y0) { Pen myPen = new Pen(Color.White, 5); SolidBrush Circle = new SolidBrush(Color.Black); //Пересчитывание координат и углов для кружков самого верхнего ряда double angle = Circle_Angles[0] - (pi / 50); double x = Circles[1, 0] - 30 * Math.Cos(angle); double y = Circles[1, 1] - 30 * Math.Sin(angle); //Прорисовка кружка выходящего в начале за пределы экрана graph.FillEllipse(Circle, (int)x, (int)y-60, 60, 60); graph.DrawEllipse(myPen, (int)x, (int)y-60, 60, 60); for (int i = 1; i < 10; i++) { //Прорисорвка всех кружков в ряду graph.FillEllipse(Circle, (int)x + i * 60, (int)y-60, 60, 60); graph.DrawEllipse(myPen, (int)x + i * 60, (int)y-60, 60, 60); } //Прорисовка началаьного кружка в ряду и перерисовка кружка рядом ниже graph.FillEllipse(Circle, (int)x - 60, (int)y-60, 60, 60); graph.DrawEllipse(myPen, (int)x - 60, (int)y-60, 60, 60); graph.FillEllipse(Circle, (int)x0, (int)y0, 60, 60); graph.DrawEllipse(myPen, (int)x0, (int)y0, 60, 60); } //Рисование кружков в последних рядах(выходящих за пределы экрана) private void DrawCirclesBottom() { Pen myPen = new Pen(Color.White, 5); SolidBrush Circle = new SolidBrush(Color.Black); //Пересчитывание координат и углов для кружков самого нижнего ряда double angle = Circle_Angles[14] + (pi / 50); double x = Circles[13, 0] - 30 * Math.Cos(angle); double y = Circles[13, 1] - 30 * Math.Sin(angle); //Прорисовка кружка выходящего в начале за пределы экрана graph.FillEllipse(Circle, (int)x - 60, (int)y + 60, 60, 60); graph.DrawEllipse(myPen, (int)x - 60, (int)y + 60, 60, 60); for (int i = 1; i < 10; i++) { //Отрисовка всех кружков в ряду graph.FillEllipse(Circle, (int)x + i * 60, (int)y + 60, 60, 60); graph.DrawEllipse(myPen, (int)x + i * 60, (int)y + 60, 60, 60); } //Отрисовка начального кружка последнего ряда graph.FillEllipse(Circle, (int)x, (int)y + 60, 60, 60); graph.DrawEllipse(myPen, (int)x, (int)y + 60, 60, 60); } private void Form1_Load(object sender, EventArgs e) { //Присваивание значений углов в начале отрисовки Circle_Angles[0] = 0; for (int i = 1; i < 15; i++ ) { Circle_Angles[i] = Circle_Angles[i - 1] + (pi / 15); } //Вызов функции таймера timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { //Создаем bitmap Waves = new Bitmap(Wavesbox.Width, Wavesbox.Height); //Создаем графику из bitmap graph = Graphics.FromImage(Waves); //Используем сглаживание при рисовании graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; Pen myPen = new Pen(Color.White, 5); SolidBrush Circle = new SolidBrush(Color.Black); //закрашиваем черным цветом фон graph.Clear(Color.Black); //Цикл прорисовки всех кружков for(int i=0; i<15; i++) { //Пересчитывание координат для кружков double x = Circles[i, 0] - 30 * Math.Cos(Circle_Angles[i]); double y = Circles[i, 1] - 30 * Math.Sin(Circle_Angles[i]); //Пересчитывание углов Circle_Angles[i] = Circle_Angles[i] + (pi / 50); //Отрисовать начальный кружок ряда graph.FillEllipse(Circle, (int)x, (int)y, 60, 60); graph.DrawEllipse(myPen, (int)x, (int)y, 60, 60); //Если рисуем первый ряд if(i==0) { //Рисуем сначала верхний ряд(выходящий за пределы экрана), потом ниже DrawCirclesTop((int)x, (int)y ); DrawCircles((int)x, (int)y); } //Если рисуем последний ряд else if(i==14) { //Рисуем сначала предпоследний ряд, а потом нижний(выходящий за пределы экрана) DrawCircles((int)x, (int)y); DrawCirclesBottom(); } //Иначе рисуем все остальные ряды else DrawCircles((int)x,(int)y); } //Выводим содержимое на picturebox Wavesbox.BackgroundImage = Waves; } private void Wavesbox_Click(object sender, EventArgs e) { } } }
Прикрепленный файл | Размер |
---|---|
Waves.zip | 55.32 кб |