Нарисуйте анимированный атом в C#
Когда срабатывает Timer формы, его обработчик события Tick обновляет форму, чтобы принудительно выполнить перерисовку. Обработчик события Paint формы рисует атом.
private double Theta = 0;
private const double Dtheta = Math.PI / 5;
// Рисуем атом.
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(this.BackColor);
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
Theta += Dtheta;
const int radius = 3;
int cx = 50, cy = 50, rx = 45, ry = 15;
Rectangle rect = new Rectangle(-rx, -ry, 2 * rx, 2 * ry);
double x, y;
e.Graphics.RotateTransform(60, MatrixOrder.Append);
e.Graphics.TranslateTransform(cx, cy, MatrixOrder.Append);
e.Graphics.DrawEllipse(Pens.Red, rect);
x = rx * Math.Cos(Theta);
y = ry * Math.Sin(Theta);
e.Graphics.FillEllipse(Brushes.Red,
(int)(x - radius), (int)(y - radius),
2 * radius, 2 * radius);
e.Graphics.ResetTransform();
e.Graphics.RotateTransform(-60, MatrixOrder.Append);
e.Graphics.TranslateTransform(cx, cy, MatrixOrder.Append);
e.Graphics.DrawEllipse(Pens.Red, rect);
x = rx * Math.Cos(-Theta * 0.9);
y = ry * Math.Sin(-Theta * 0.9);
e.Graphics.FillEllipse(Brushes.Green,
(int)(x - radius), (int)(y - radius),
2 * radius, 2 * radius);
e.Graphics.ResetTransform();
e.Graphics.TranslateTransform(cx, cy, MatrixOrder.Append);
e.Graphics.DrawEllipse(Pens.Red, rect);
x = rx * Math.Cos(Theta * 0.8);
y = ry * Math.Sin(Theta * 0.8);
e.Graphics.FillEllipse(Brushes.Blue,
(int)(x - radius), (int)(y - radius),
2 * radius, 2 * radius);
e.Graphics.ResetTransform();
e.Graphics.FillEllipse(Brushes.Black,
cx - radius, cy - radius,
2 * radius, 2 * radius);
}
Для каждого электрона обработчик события Paint использует методы Graphics объекта Graphics> Transform и TranslateTransform для подготовки к рисовать повернутые и переведенные объекты. Затем он рисует эллипс с центром в начале координат. Вращение и масштабирование соответствуют ему для атома.
Затем код затем использует тригонометрию, чтобы выяснить, где электрон должен находиться на своей орбите и нарисовать там круг.
