Среда программирования:
Visual Studio 2013
using System; using System.Drawing; using System.Windows.Forms; namespace Dots_Rotation { public partial class Form1 : Form { //Проверка на отрисовку точек в первый раз private int First_Time = 1; //Число пи private const double pi = 3.14; //Инициализация bitmap private Bitmap Circle_map; //Инициализация графики private Graphics g; public Form1() { InitializeComponent(); } //Массив точек, с начальными значениями //{радиус точки, количество итераций ожидания изменения радиуса точки(необходимо в дальнейшем), изменение радиуса(0-уменьшение точки, 1-увеличение точки)} private int[,] Dots = new int[12, 3] { {40,3,0}, {40,2,0}, {40,1,0}, {36,0,1}, {32,0,1}, {28,0,1}, {24,0,1}, {20,0,1}, {16,0,1}, {12,3,1}, {12,2,1}, {12,1,1}, }; //Массив углов точек private double[] Dots_Angle = new double[12]; private void Form1_Load(object sender, EventArgs e) { timer1.Start(); } private void pictureBox1_Click(object sender, EventArgs e) { } private void timer1_Tick(object sender, EventArgs e) { //Создаем bitmap Circle_map = new Bitmap(pictureBox1.Width, pictureBox1.Height); //Создаем графику из bitmap g = Graphics.FromImage(Circle_map); //Используем сглаживание при рисовании g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //закрашиваем черным цветом фон //Graphics g = pictureBox1.CreateGraphics(); SolidBrush Dot = new SolidBrush(Color.Red); g.Clear(Color.Black);//закрашивание экрана //Отрисовка точек первый раз if(First_Time==1) { for (int i = 0; i < 12; i++ ) { Dots_Angle[i] = 0; } //Нахождение координат первой точки double x = 200 + 100 * Math.Cos(Dots_Angle[0]); double y = 150 - 100 * Math.Sin(Dots_Angle[0]); //Отрисовка точки g.FillEllipse(Dot, (int)x, (int)y, Dots[0, 0], Dots[0, 0]); //Нахождение и отрисовка остальных точек for (int i = 1; i < 12; i++) { Dots_Angle[i] = Dots_Angle[i - 1] + (pi / 6); x = 170 + 100 * Math.Cos(Dots_Angle[i]); y = 100 - 100 * Math.Sin(Dots_Angle[i]); g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]); } First_Time = 0; } //Если отрисовка происходит не в первый раз else { //Цикл по каждой точке for (int i = 0; i < 12; i++) { //Пересчитывание координат точки Dots_Angle[i] = Dots_Angle[i] + (pi/200); double x = 170 + 100 * Math.Cos(Dots_Angle[i]); double y = 120 - 100 * Math.Sin(Dots_Angle[i]); //Если радиус точки наибольший(по умолчанию - 40) if (Dots[i, 0] == 40) { //Если количество итераций ожидания равен 3, то уменьшаем радиус точки и отрисовываем if (Dots[i, 1] == 3) { Dots[i, 0] = Dots[i, 0] - 4; g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]); Dots[i, 1] = 0; Dots[i, 2] = 0; continue; } //Иначе, отрисовываем точку с тем же радиусом что и был, только с другими координатами else if (Dots[i, 0] == 40 && Dots[i, 1] != 3) { g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i,0]); Dots[i, 1]++; continue; } } //Если радиус точки наименьший(по умолчанию - 12) if (Dots[i, 0] == 12) { //Если количество итераций ожидания равен 3, то увеличиваем радиус точки и отрисовываем if (Dots[i, 1] == 3) { Dots[i,0] = Dots[i, 0] + 4; g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]); Dots[i, 1] = 0; Dots[i, 2] = 1; continue; } //Иначе, отрисовываем точку с тем же радиусом что и был, только с другими координатами else if (Dots[i, 0] == 12 && Dots[i, 1] != 3) { g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]); Dots[i, 1]++; continue; } } //Если радиус точки находится между наибольшим и наименьшим радиусом, и коэффициент изменения радиуса равен 1, то увеличиваем радиус и отрисовываем точку if (Dots[i, 0] != 40 && Dots[i, 0] != 12 && Dots[i, 2] == 1) { Dots[i, 0] = Dots[i, 0] + 4; g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]); if (Dots[i, 0] == 40) { Dots[i, 2] = 0; } continue; } //Если радиус точки находится между наибольшим и наименьшим радиусом, и коэффициент изменения радиуса равен 0, то уменьшаем радиус и отрисовываем точку if (Dots[i, 0] != 40 && Dots[i, 0] != 12 && Dots[i, 2] == 0) { Dots[i, 0] = Dots[i, 0] - 4; g.FillEllipse(Dot, (int)x, (int)y, Dots[i, 0], Dots[i, 0]); if (Dots[i, 0] == 12) { Dots[i, 2] = 1; } continue; } } } pictureBox1.BackgroundImage = Circle_map; } } }
Прикрепленный файл | Размер |
---|---|
Dots_Rotation.zip | 56.09 кб |