Управляемое вращение линии
Листинг 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 через интервал времени, заданный ползунком.