Язык программирования:
C#
Среда программирования:
Microsoft Visual Studio 2013
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Rotating_Polygons { public partial class Form1 : Form { SolidBrush bgcol = new SolidBrush(Color.White);//цвет фона int cnt1 = 0; //счетчик таймера float speedA = 0; //переменная скорости вращения для каждого многоугольника float speedB = 0; float speedC = 0; float speedD = 0; float speedE = 0; float speedF = 0; float speedG = 0; float speedH = 0; float speedI = 0; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { timer1.Start(); } private void SetPolygon(PointF center, int vertexes, float radius, Graphics graphics, Bitmap bmp, float speed) // создаем функцию, которая рисует многоугольник с заданным кол-вом вершин по радиусу описанной окружности и координатам центра окружности { var angle = Math.PI * 2 / vertexes; //угол правильного многоугольника вычисляется по формуле 2*pi/(кол-во вершин) var points = Enumerable.Range(0, vertexes).Select(i => PointF.Add(center, new SizeF((float)Math.Sin(i * angle) * radius, (float)Math.Cos(i * angle) * radius)));//создаем массив точек, по которым будем строить многоугольник SolidBrush transparent = new SolidBrush(Color.FromArgb(30, 255, 0, 0));//задаем полупрозрачную заливку graphics.TranslateTransform((float)pictureBox1.Width / 2, (float)pictureBox1.Height / 2);//смещаем начало координат в центр pictureBox graphics.RotateTransform(speed);//поворачиваем графику на определенный угол graphics.FillPolygon(transparent, points.ToArray()); //заполняем многоугольник } private void RotatingFigures() { Bitmap btmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics a = Graphics.FromImage(btmp); //для каждой фигуры создаем графику Graphics b = Graphics.FromImage(btmp); Graphics c = Graphics.FromImage(btmp); Graphics d = Graphics.FromImage(btmp); Graphics e = Graphics.FromImage(btmp); Graphics f = Graphics.FromImage(btmp); Graphics g = Graphics.FromImage(btmp); Graphics h = Graphics.FromImage(btmp); Graphics i = Graphics.FromImage(btmp); g.FillRectangle(bgcol, 0, 0, 500, 500);//заливаем фон SetPolygon(new PointF(0, 0), 3, 20, a, btmp, speedA); //рисуем фигуры SetPolygon(new PointF(0, 0), 4, 45, b, btmp, speedB); SetPolygon(new PointF(0, 0), 5, 70, c, btmp, speedC); SetPolygon(new PointF(0, 0), 6, 95, d, btmp, speedD); SetPolygon(new PointF(0, 0), 7, 120, e, btmp, speedE); SetPolygon(new PointF(0, 0), 8, 145, f, btmp, speedF); SetPolygon(new PointF(0, 0), 9, 170, g, btmp, speedG); SetPolygon(new PointF(0, 0), 10, 195, h, btmp, speedH); SetPolygon(new PointF(0, 0), 11, 220, i, btmp, speedI); pictureBox1.BackgroundImage = btmp; //переносим рисунок из буфера на pictureBox } private void timer1_Tick(object sender, EventArgs e) { cnt1++;//увеличиваем счетчик speedA += (float)1.1; //увеличиваем угол вращения с каждым шагом (для каждой фигуры разный) speedB += (float)1; speedC += (float)0.9; speedD += (float)0.8; speedE += (float)0.7; speedF += (float)0.6; speedG += (float)0.5; speedH += (float)0.4; speedI += (float)0.3; if (cnt1 == 3600) { cnt1 = 0; speedA = 0; speedB = 0; speedC = 0; speedD = 0; speedE = 0; speedF = 0; speedG = 0; speedH = 0; speedI = 0; }//по завершении анимации обнуляем значения переменных RotatingFigures(); //вызываем функцию рисования фигур } } }
Прикрепленный файл | Размер |
---|---|
Garvilenko_Rotating_Polygons.rar | 36.09 кб |