Компьютерная графика, мультимедиа и игры на Visual C#

       

Управляемое вращение линии


Листинг 55.1. Код проектирования рисунка.

//Переменную "angle" (для угла поворота) приравниваем нулю:

int angle = 0;

private void pictureBox1_Paint(object sender,

                                            PaintEventArgs e)

{

      //Объявляем локальные переменные:

      //Радиус вращающейся линии:

      float r = 100.0F;

      //Абсцисса и ордината неподвижной граничной точки,

      //вокруг которой вращается линия (центра вращения):

      float x_centre = 100.0F;

      float y_centre = 100.0F;



      //Текущие значения абсциссы и ординаты

      //граничной вращающейся точки:

      float x, y;

      

      //Определяем текущие значения абсциссы и ординаты

      //граничной вращающейся точки

      //и преобразовываем в тип (float):

      x = x_centre + r * Convert.ToSingle(

                   Math.Cos(2 * Math.PI * angle / 360));

      y = y_centre + r * Convert.ToSingle(

                    Math.Sin(2 * Math.PI * angle / 360));

      //Выполняем процедуру DrawLine класса Graphics

      //для построения линии по двум точкам

      //с координатами (x_centre, y_centre) и (x, y):

      e.Graphics.DrawLine(new Pen(Color.Black, 3),

                             x_centre, y_centre, x, y);

      //Увеличиваем угол поворота линии,

      //на один шаг, равный 6 градусам:

      angle = angle + 6;

      //Обнуляем угол поворота линии,

      //когда линия сделает полный оборот

      //на 360 градусов:

      if (angle == 360) angle = 0;

      //Для наглядности рисуем окружность

      //(типа циферблата часов),

      //внутри которой будет вращаться линия:

      e.Graphics.DrawEllipse(new Pen(Color.Blue, 2),

                                     0, 0, 200, 200);

      //Рисуем две оси симметрии окружности,

      //горизонтальную и вертикальную:

      e.Graphics.DrawLine(new Pen(Color.Red, 1),

                                    0, 100, 200, 100);

      e.Graphics.DrawLine(new Pen(Color.Red, 1),


                                    100, 0, 100, 200);
}
Чтобы установить значение свойства Interval компонента Timer в зависимости от свойства Value ползунка элемента управления TrackBar, дважды щелкаем элемент управления TrackBar в режиме проектирования (рис. 37.2). Появляется файл Form7.cs с шаблоном, который после записи двух строк нашего кода (не считая комментариев) принимает вид следующего метода.
Листинг 55.2. Метод для элемента управления TrackBar.
private void trackBar1_Scroll(object sender,
                                         EventArgs e)
{
     //Устанавливаем свойство таймера Enabled равным true:
     timer1.Enabled = true;
     //Устанавливаем значение свойства Interval таймера
     //в зависимости от перемещения ползунка Value:
     timer1.Interval = trackBar1.Value;
}
Чтобы подключить к работе таймер, дважды щелкаем значок для компонента Timer в режиме проектирования. Появляется файл Form7.cs с шаблоном, который после записи строки нашего кода (не считая комментариев) принимает такой вид.
Листинг 55.3. Метод для компонента Timer.
private void timer1_Tick(object sender, EventArgs e)
{
    //Перерисовываем клиентскую область элемента pictureBox1
    //через каждый Interval времени:
    pictureBox1.Refresh();
}
В этом коде метод Refresh (класса Control) перерисовывает клиентскую область элемента управления PictureBox через интервал времени, заданный ползунком.

Содержание раздела