C# programok ismertetése érdeklődőknek kezdőktől haladókig

C# MŰHELY

C# MŰHELY

GRAFIKA: Föld Nap körüli pályán való mozgásának modellezése

2020. augusztus 18. - Benkő Tiborné

Tervezzünk animációt a Föld Nap körüli pályán való mozgásának modellezésére

A feladat időkezeléséhez a Timer eszköz timer1 objektumpéldányát használjuk, melynek Interval tulajdonságát  100-ra állítottuk be. A timer1_Tick eseménykezelő mozgatja a Földet a Nap körül. Kör, Vonal és a Tárgy osztályokat használtuk a feladat megoldásához.

A feladat megoldása

                public partial class Form1 : Form
     {
        public Form1()
        {
            InitializeComponent();
        }     

        Targy pt = null;
        int szog = 0, dszog = -1; // fok

        // START, az animáció indítása,
        // illetve a STOP után az animáció folytatása
        private void button1_Click(object sender, EventArgs e)
        {
            int xk = this.ClientSize.Width / 2;
            int yk = this.ClientSize.Height / 2;
            pt = new Targy(xk, yk, 20);
            pt.Rajzol(this);
            timer1.Interval = 50;
            timer1.Start();
        }

        // STOP, az animáció működésének felfüggesztés
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            szog = (szog - dszog) % 360;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            szog = (szog + dszog) % 360;
            pt.Mozog(
this, szog * Math.PI / 180.0);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Blue;
        }

        // KILÉPÉS a programból
        private void button3_Click(object sender, EventArgs e)
        {
             Application.Exit();
        }

        private void Form1_FormClosing(object sender,
                                      FormClosingEventArgs e)
        {
             e.Cancel = true;
             DialogResult dlgres;
             dlgres = MessageBox.Show("Valóban ki akar lépni?",
                                      "Figyelem",
                                      MessageBoxButtons.YesNo,
                                      MessageBoxIcon.Question);
             if (dlgres == DialogResult.Yes)
             {
                  e.Cancel = false;
             }
         }
     }

    class Kor
    {
        public int x, y, r;
        public Kor(int x0, int y0, int r0)
        {
            x = x0; y = y0;
            r = r0;
        }

        public void Mozog(int x0, int y0, int r0)
        {
            x = x0; y = y0;
            r = r0;
        }

        public void Rajzol(Form1 form)
        {
            Graphics g = form.CreateGraphics();
            Rectangle t = new Rectangle(new Point(x - r,
                                   y - r), new Size(2 * r, 2 * r));
            g.FillEllipse(Brushes.Lime, t);
        }

        public void Torol(Form1 form)
        {
            Graphics g = form.CreateGraphics();
            Rectangle t = new Rectangle(new Point(x - r,
                                 y - r), new Size(2 * r, 2 * r));
            g.FillEllipse(Brushes.Blue, t);
        }
    }

    class Vonal
    {
        public int x, y, xv, yv;

        public Vonal(float x0, float y0, float xv0, float yv0)
        {
            x = (int)x0; y = (int)y0;
            xv = (int)xv0; yv = (int)yv0;
        }
    }

    class Targy
    {
        public Kor Nap, Fold;
        public Vonal[] v;

        public Targy(int x, int y, int r)
        {
            Nap = new Kor(x, y, r);
            Fold = new Kor(0, 0, 0);
            v = new Vonal[4];
            v[0] = new Vonal(x - 1.5f * r, y - 1.5f * r,
                             x + 1.5f * r, y + 1.5f * r);
            v[1] = new Vonal(x - 1.5f * r, y + 1.5f * r,
                             x + 1.5f * r, y - 1.5f * r);
            v[2] = new Vonal(x - 2 * r, y, x + 2 * r, y);
            v[3] = new Vonal(x, y - 2 * r, x, y + 2 * r);
        }

        public void Rajzol(Form1 form)
        {
            Graphics g = form.CreateGraphics();
            for (int i = 0; i < 4; i++)
            {
                 g.DrawLine(Pens.Yellow, new Point(v[i].x,
                            v[i].y), new Point(v[i].xv, v[i].yv));
            }

            Rectangle t = new Rectangle(new Point(Nap.x –
                                 Nap.r, Nap.y - Nap.r),
                                new Size(2 * Nap.r, 2 * Nap.r));
            g.FillEllipse(Brushes.Yellow, t);
        } 

        public void Mozog(Form1 form, double szog)
        {
            const int er1 = 200, er2 = 100;
            Fold.Torol(form);
            int xFold = (int)(Nap.x + er1 * Math.Cos(szog));
            int yFold = (int)(Nap.y - er2 * Math.Sin(szog));
            Fold.Mozog(xFold, yFold, 10);
            Fold.Rajzol(form);
        }

     A program futási eredményei:

A bejegyzés trackback címe:

https://csharp-muhely.blog.hu/api/trackback/id/tr6416168198

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása