Среда программирования:
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 demo1 { public partial class Form1 : Form { Bitmap myBitmap;//объявляем bitmap Graphics g;//и графику SolidBrush fil = new SolidBrush(Color.Black);//цвет заливки фигуры будет черным SolidBrush fon = new SolidBrush(Color.White);//цвет фона будет белым Point[] myPoint1 = new Point[]{//этот массив точек будет описывать исходное состояние фигуры - квадрат new Point( -100, -100 ), new Point( -100, 100 ), new Point( 100, 100 ), new Point( 100, -100 ), }; Point[] myPoint2 = new Point[]{//а этим описан восьмиугольник, который будет превращаться в квадрат new Point( -100, 0 ), new Point( -50, 50 ), new Point( 0, 100 ), new Point( 50, 50 ), new Point( 100, 0 ), new Point( 50, -50 ), new Point( 0, -100 ), new Point( -50, -50 ) }; bool draws = true;//создаем переменную типа bool, дальше станет ясно, зачем она нам нужна public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { timer1.Start();//в данной функции вызвается таймер } private void Change()//функция изменения фигуры { myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);//создаем битмап Graphics g = Graphics.FromImage(myBitmap);//и графику g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//избавляемся от пиксельности по краю фигуры g.FillRectangle(fon, 0, 0, 500, 400);//заливаем фон g.TranslateTransform((float)pictureBox1.Width / 2, (float)pictureBox1.Height / 2);//смещаем начало координат в центр //запускается цикл, в котором и будет с течением времени изменяться рисунок if (draws)//если переменной присвоено значение true { myPoint1[0].Y += 2;//то смещаем координаты вершин квадрата по прямым, myPoint1[1].X += 2;//передвигая их на координатные оси myPoint1[2].Y -= 2;// myPoint1[3].X -= 2;// g.FillPolygon(fil, myPoint1);//прорисовываем нашу фигуру, используя массив точек квадрата if (myPoint1[1].X == 0)//когда вершины четырехугольника окажутся на осях, { //(для этого достаточно проверить только одно условие) draws = false;//переменной присваиваем значение false myPoint1[0].Y = -100;//и вершины снова смещаем в положение исходного квадрата myPoint1[1].X = -100; myPoint1[2].Y = 100; myPoint1[3].X = 100; } } else//иначе(т.е. когда переменной присвоено значение false) { myPoint2[1].X -= 2; myPoint2[1].Y += 2;//четыре точки восьмиугольника мы смещаем так, myPoint2[3].X += 2; myPoint2[3].Y += 2;//чтоб в конечном итоге у нас получился квадрат myPoint2[5].X += 2; myPoint2[5].Y -= 2; myPoint2[7].X -= 2; myPoint2[7].Y -= 2; g.FillPolygon(fil, myPoint2);//прорисовываем фигуру, используя массив точек восьмиугольника if (myPoint2[1].X == -100)//и вот когда у нас уже получился квадрат {//(для этого опять же достаточно проверить положение всего одной точки) draws = true;//мы снова присваиваем переменной значение true, myPoint2[1].X = -50; myPoint2[1].Y = 50;//а точки смещаем в положение исходного восьмиугольника myPoint2[3].X = 50; myPoint2[3].Y = 50; myPoint2[5].X = 50; myPoint2[5].Y = -50; myPoint2[7].X = -50; myPoint2[7].Y = -50; } } pictureBox1.BackgroundImage = myBitmap;//и отображаем Bitmap на pictureBox } private void timer1_Tick(object sender, EventArgs e) { Change();//в функции таймера вызываем нашу функцию изменения фигуры } } }
Прикрепленный файл | Размер |
---|---|
KozlovaE_Shrinking_and_expanding.zip | 47.11 кб |