Язык программирования:
C#
Среда программирования:
Microsoft Visual Studio 2015
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 WindowsFormsApplication8 { public partial class Form1 : Form { Graphics g; Bitmap bmp; int rh = 210;//длинна стороны шестиугольника int cnt = 0;//количество тиков таймера int k = 0;//номер вершины шестиугольника double ang = (Math.PI) * 2 / 3;//угол на который поворачиваем круги Point[] pt=new Point[7];//массив вершин шестиугольника Pen lines = new Pen(Color.FromArgb(20,Color.DimGray),2);//для прорисовки всех линий int flag = 0; public Form1() { InitializeComponent(); } //вершины шестиугольника void Hexagon() { double ang = 0; int x, y; pt[0].X = rh; pt[0].Y = 0; for (int i = 1; i < 7; i++) { ang += (Math.PI) * 2 / 6; x = (int)(Math.Cos(ang) * rh); y = (int)(Math.Sin(ang) * rh); pt[i].X = x; pt[i].Y = y; } } //все дуги void DrawArcs() { int ang = 120; for(int i = 0; i < 7; i++) { for(int r = 30; r <= 210; r += 30) { g.DrawArc(lines, pt[i].X - r, pt[i].Y - r, 2 * r, 2 * r, ang, 120); } ang += 60; } } void Circle(int x,int y,int r,Color col) { g.FillEllipse(new SolidBrush(col), x - r, y - r, 2 * r, 2 * r); } //8 кругов вокруг точки pt void DrawCircles(Point pt,double ang) { int r = 0; int x, y; for(int i = 0; i < 8; i++) { x = (int)(Math.Cos(ang) * r + pt.X); y = (int)(Math.Sin(ang) * r + pt.Y); Circle(x, y, 5,Color.FromArgb(255,255-r,0+r,150)); r += 30; } } private void timer1_Tick(object sender, EventArgs e) { if (flag == 0) { Hexagon();//просчитываем вершины шестиугольника flag = 1; } //Создаем bitmap и графику из bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); g = Graphics.FromImage(bmp); g.TranslateTransform(pictureBox1.Width / 2, pictureBox1.Height / 2);//перемещаем начало координат в центр g.Clear(Color.Black);//заливаем фон g.DrawPolygon(lines, pt);//рисуем шестиугольник DrawArcs();//рисуем все дуги DrawCircles(pt[6-k], ang);//круги вокруг точки pt[6-k] pictureBox1.Image = bmp;//отображаем bitmap на PictureBox ang += (Math.PI) /15; cnt++; //если точки перешли на другую сторону,меняем угол и точку,вокруг которой будут вращаться точки if (cnt % 10 == 0) { ang -= (Math.PI); k++; k %= 6; } } } }
Прикрепленный файл | Размер |
---|---|
Sherfedinova_hexagon.zip | 6.05 кб |