На главную

Анимация. Летающий шарик по кругу

Lighting/Colors

Для расчета текущих координат на окружности нам потребуются простейшие тригонометрические функции такие как синус и косинус.


  Координата Х = ЦентрХ + Радиус * Косинус (Угол)
  Координата Y = ЦентрY + Радиус * Синус (Угол)
    

Объявим переменные для текущего состояния анимации: angle - текущий угол в градусах для шарика на круге. radius - радиус круга по которому летает объект, circleWidth - радиус отрисовываемого шарика который летает по окружности

double angle = 0;
float radius = 100;
float circleWidth = 10;

Расчитаем центр нашего окна используя ClientSize Далее на каждом шаге отрисовки будет прибавлять +0.5 градуса к текущему положению шарика, если значение угла становится больше 360, то будем вычитать 360 градусов, для этого восползуемся оператором остаток от деления %. Перевод в радианы осуществляется путем домножения градусов на PI/180


var centerX = ClientSize.Width / 2;
var centerY = ClientSize.Height / 2;

angle += 0.5;
angle %= 360;

var radians = angle / 180.0 * Math.PI;

var circleX = (float)(centerX + radius * Math.Cos(radians));
var circleY = (float)(centerY + radius * Math.Sin(radians));

gr.DrawEllipse(Pens.Black, centerX - radius, centerY - radius, radius * 2, radius * 2);
gr.FillEllipse(Brushes.Blue, circleX - circleWidth, circleY - circleWidth, circleWidth * 2, circleWidth * 2);
    

В дальнейшем движение по кругу используя синус и косинус будет использоваться множество разных. Необходимо знать и понимать как они работают.

Вставив и запустив данный пример мы увидим следующую анимацию:

Исходный код данного примера вы можете найти здесь

Упражнения

  • Сделать несколько летающих шариков
  • Сделать несколько летающих объектов (шарик, квадратик), с разными цветами и разной скоростью
  • Сделать модель планетарной системы. Несколько летающих шариков-планет разного размера и каждый на своей "орбите" с разным радиусом
  • Вместо шарика сделать вторую окружность центр которой летает вместо шарика, а шарик сделать летающим по орбите второй окружности
HI