Среда программирования:
Microsoft Visual Studio 2010 Express
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; namespace demo4 { public partial class Form1 : Form { Bitmap myBitmap;//объявляем bitmap Graphics g;//и графику SolidBrush fil1 = new SolidBrush(Color.Yellow);//один цвет заливки будет желтый SolidBrush fil2 = new SolidBrush(Color.ForestGreen);//другой зеленый float x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6, x7, y7, x8, y8, x9, y9; //с помощью этих переменных будем прорисовывать точки на каждом из кругов int r1 = 42, r2 = 58, r3 = 74, r4 = 90, r5 = 106, r6 = 122, r7 = 138, r8 = 154, r9 = 170; //радиусы, на которых расположены точки на кругах float a1, a2, a3, a4, a5, a6, a7, a8;//это мы будем прибавлять к углу чтобы он увеличивался float angle;//угол между точками на каждом круге float time;//эта переменная понадобится в таймере, чтобы делать задержку между вращениями public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { timer1.Start();//в данной функции вызвается таймер } private void Move()//функция изменения фигуры { myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);//создаем битмап Graphics g = Graphics.FromImage(myBitmap);//и графику g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//избавляемся от пиксельности по краям g.FillRectangle(fil1, 0, 0, 600, 600);//заливаем фон g.TranslateTransform((float)pictureBox1.Width / 2, (float)pictureBox1.Height / 2);//смещаем начало координат в центр g.FillEllipse(fil2, -178, -178, 356, 356);//прорисовываем первый круг, самый большой g.FillEllipse(fil1, -162, -162, 324, 324);//следующий по размеру, и заливаем его уже другим цветом g.FillEllipse(fil2, -146, -146, 292, 292);//и так далее g.FillEllipse(fil1, -130, -130, 260, 260); g.FillEllipse(fil2, -114, -114, 228, 228); g.FillEllipse(fil1, -98, -98, 196, 196); g.FillEllipse(fil2, -82, -82, 164, 164); g.FillEllipse(fil1, -66, -66, 132, 132); g.FillEllipse(fil2, -50, -50, 100, 100); angle = 0;//обнуляем угол for (int i = 0; i < 16; i++)//в каждом круге будет по 16 точек { x1 = -5 + (float)(r1 * (float)Math.Cos(angle + a8));//сначала рисуем точки на самом маленьком круге y1 = -5 + (float)(r1 * (float)Math.Sin(angle + a8));//изменяя перед этим изменяя х и у. прибавляем к углу переменную а, //которая будет изменятся с течением времени g.FillEllipse(fil1, x1, y1, 10, 10);//таким образом получаем круг из точек, которые вращаются x2 = -5 + (float)(r2 * (float)Math.Cos(angle + a7));//эту операцию проделываем и для других кругов y2 = -5 + (float)(r2 * (float)Math.Sin(angle + a7)); g.FillEllipse(fil2, x2, y2, 10, 10); x3 = -5 + (float)(r3 * (float)Math.Cos(angle + a6)); y3 = -5 + (float)(r3 * (float)Math.Sin(angle + a6)); g.FillEllipse(fil1, x3, y3, 10, 10); x4 = -5 + (float)(r4 * (float)Math.Cos(angle + a5)); y4 = -5 + (float)(r4 * (float)Math.Sin(angle + a5)); g.FillEllipse(fil2, x4, y4, 10, 10); x5 = -5 + (float)(r5 * (float)Math.Cos(angle + a4)); y5 = -5 + (float)(r5 * (float)Math.Sin(angle + a4)); g.FillEllipse(fil1, x5, y5, 10, 10); x6 = -5 + (float)(r6 * (float)Math.Cos(angle + a3)); y6 = -5 + (float)(r6 * (float)Math.Sin(angle + a3)); g.FillEllipse(fil2, x6, y6, 10, 10); x7 = -5 + (float)(r7 * (float)Math.Cos(angle + a2)); y7 = -5 + (float)(r7 * (float)Math.Sin(angle + a2)); g.FillEllipse(fil1, x7, y7, 10, 10); x8 = -5 + (float)(r8 * (float)Math.Cos(angle + a1)); y8 = -5 + (float)(r8 * (float)Math.Sin(angle + a1)); g.FillEllipse(fil2, x8, y8, 10, 10); x9 = -5 + (float)(r9 * (float)Math.Cos(angle));//не будут двигаться у нас только точки на самом большом кругу y9 = -5 + (float)(r9 * (float)Math.Sin(angle)); g.FillEllipse(fil1, x9, y9, 10, 10); angle += (float)0.392;//увеличиваем угол } pictureBox1.BackgroundImage = myBitmap;//и отображаем Bitmap на pictureBox } private void timer1_Tick(object sender, EventArgs e) { if (time < 156.8) { a1 -= (float)0.0025;//увеличиваем приращения углов a2 -= (float)0.005; a3 -= (float)0.0075; a4 -= (float)0.01; a5 -= (float)0.0125; a6 -= (float)0.015; a7 -= (float)0.0175; a8 -= (float)0.02; } if (a1 >= 0.392) a1 = 0;//еcли приращение станет больше, чем один угол между двумя точками, обнуляем приращение if (a2 >= 0.392) a2 = 0; if (a3 >= 0.392) a3 = 0; if (a4 >= 0.392) a4 = 0; if (a5 >= 0.392) a5 = 0; if (a6 >= 0.392) a6 = 0; if (a7 >= 0.392) a7 = 0; if (a8 >= 0.392) a8 = 0; time += (float)1.0051;//увеличиваем переменную времени if (time >= 170) time = 0;//и таким образом, некоторое время наши точки будут статичны, а потом снова начнут движение Move();//в функции таймера вызываем нашу функцию прорисовки квадратов } } }
Прикрепленный файл | Размер |
---|---|
KozlovaE_G&Y_dots.zip | 49.56 кб |