Нарисуйте анимированный атом в 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 для подготовки к рисовать повернутые и переведенные объекты. Затем он рисует эллипс с центром в начале координат. Вращение и масштабирование соответствуют ему для атома.
Затем код затем использует тригонометрию, чтобы выяснить, где электрон должен находиться на своей орбите и нарисовать там круг.