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

Затем код затем использует тригонометрию, чтобы выяснить, где электрон должен находиться на своей орбите и нарисовать там круг.

Источник: http://csharphelper.com/blog/2015/08/draw-an-animated-atom-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector