Program formularzowy dla animacji ruchu obiektu po torze ruchu

0

Witam.
Mam zadany projekt na uczelnie. Polega na napisaniu programu animującego ruch obiektu po torze ruchu. Co prawda ćwiczenia jeszcze przede mną bo sam projekt zadany jest na połowę marca, aczkolwiek chciałbym rozgryźć go już trochę samodzielnie. Póki co mam napisany program, który kreśli pęk linii na układzie współrzędnych. Czy da radę przerobić, skorzystać w jakiś sposób z tego kodu i napisać to o co mi chodzi? Dajmy na przykład, że wyrysuję tor ruchu jako tangensoidę na układzie i po niej będzie się poruszała piłeczka, kropka w tę i z powrotem bez przerwy. Do tego jakiś suwak na zmianę prędkości ruchu obiektu, grubości linii toru ruchu i układu współrzędnych, kolory linii czy samej piłeczki pozostawię na później. Poniżej zarzucam kod, o którym pisałem wcześniej (pęk linii)

namespace PekLinii
{
    public partial class PękLinii : Form
    {// deklaracje
        // deklaracja zmiennej referencyjnej egzemplarza (obbiektu) powierzchni graficzne
        Graphics Rysownica;
        // deklaracja zmiennej referencyjnej egzemplarza pióra (ołówka)
        Pen Pióro;
        // deklaracje stałych opisujące warunki brzegowe kreślonego pęku linii
        const int Margines = 40; /* odległość "czubka" pęku linii od górnej krawędzie 
                                                               powierzchni graficznej */
        const float StartFi = 145F;/*kąt połozenia lewej, 
                                   skrajnej linii kreślonego pęku linii*/
        const float KoniecFi = 35F;/*kąt połozenia prawej,
                                   skrajnej linii kreślonego pęku linii*/
        const float PrzyrostKątaFi = 2.1F;// przyrost zmiany kąta Fi
        // deklaracje zmiennych pomocniczy
        int Xo, Yo, Xs, Ys, Xmax, Ymax;
        float R, KatFi, FiWradianach;

        private void PękLinii_Paint(object sender, PaintEventArgs e)
        {
            // wykreślenie układu współrzędnych
            // ustawienie parametrów pióra dla wykreślenia układu współrzędnych
            Pióro.Color = Color.DarkBlue;
            Pióro.Width = 2F;
            Pióro.DashStyle = DashStyle.Solid;
            //ustawienie zakończeń kreślonych osi układu współrzędnych
            Pióro.StartCap = LineCap.DiamondAnchor;
            Pióro.EndCap = LineCap.Square;
            // wykreślenie osi odcziętych: x
            Rysownica.DrawLine(Pióro, Xmax - Margines, Ymax / 2, Margines, Ymax / 2);
            // wykreślenie osi rzędnych: y
            Rysownica.DrawLine(Pióro, Xmax / 2, Margines, Xmax / 2, Ymax - Margines);

            // ustawienie atrybutów dla pióra kreślącego pęk linii
            Pióro.Color = Color.Red;
            Pióro.Width = 1F;
            Pióro.DashStyle = DashStyle.Solid;
            //ustawienie zakończeń kreślonych osi układu współrzędnych
            Pióro.StartCap = LineCap.Flat;
            Pióro.EndCap = LineCap.Flat;

            // wykreślenie pęku linii
            for (KatFi = StartFi; KatFi > KoniecFi; 
                                         KatFi -= PrzyrostKątaFi)
            {
                //przeliczenie aktualnego kąta Fi na radiany
                FiWradianach = (float)(KatFi * Math.PI / 180F);
                // wyznaczenie współrzędnych na obwodzie okręgu (pęku linii)
                Xo = Xs + (int)(R * Math.Cos(FiWradianach));
                Yo = Ys - (int)(R * Math.Sin(FiWradianach));
                // Wykreślenie linii dla aktualnego konta Fi
                Rysownica.DrawLine(Pióro, Xo, Yo, Xs, Ys);

            }
            // wykreślenie (wymalowanie) opisu tekstowego osi x
            // utworzenie egzemplarza pędzla
            SolidBrush PędzelZnaków = new SolidBrush(Color.Magenta);
            // ustalenie fontu (czcionki)
            Font FontOpisuOsi = new Font("Georgia", 16);
            // wyznaczenie rozmiaru powierzchni ramki tekstu opisu osi X
            SizeF RozmiarOpisuRamkiOsiX = Rysownica.MeasureString(" X", FontOpisuOsi);
            // ustalenie odstępu opisu od osi X
            Point offsetDlaOsiX = new Point(10, 10);
            // ustalenie położenia (lokalizacji) opisu osi X
            PointF LokalizacjaOpisuOsiX = new PointF(Rysownica.VisibleClipBounds.Width - RozmiarOpisuRamkiOsiX.Width - offsetDlaOsiX.X,
                                               Rysownica.VisibleClipBounds.Height / 2 - RozmiarOpisuRamkiOsiX.Height - offsetDlaOsiX.Y);
            // wykreślenie opisu osi X
            Rysownica.DrawString(" X", FontOpisuOsi, PędzelZnaków, LokalizacjaOpisuOsiX);
        }
        
        public PękLinii()// konstruktor klasy głównej PękLinii
        {
            InitializeComponent();
            // lokalizacja i zwymiarowanie formularza
            this.Location = new Point(10, 10); //współrzędne lewego górnego narożnika formularza
            this.Width = (int)(Screen.PrimaryScreen.Bounds.Width * 0.6F);//szerokość formularza wd ekranu
            this.Height = (int)(Screen.PrimaryScreen.Bounds.Height * 0.6f);
            // poinformowanie o ustawieniu rozmiarów formularza według powyższych ustawień
            StartPosition = FormStartPosition.Manual;
            // ustalenie koloru tła dla formularza
            this.BackColor = Color.White;
            // utworzenie egzemplarza powierzchni graficznej
            Rysownica = this.CreateGraphics();
            // określenie rozmiarów Rysownicy
            Xmax = this.Size.Width - Margines;
            Ymax = this.Size.Height - Margines;
            // wyznaczenie środka układu współrzędnych (pęku linii)
            Xs = Xmax / 2;
            Ys = Ymax / 2;
            // wyznaczenie promienia okręgu (dla wykreślenia pęku linii)

            R = Ymax / 2 - Margines;
            //utworzenie egzemplarza pióra
            Pióro = new Pen(Color.Red, 1); //kolor i grubość linii
            //ustawienie stylu linii
            Pióro.DashStyle = DashStyle.Solid;

        }

        private void PękLinii_Load(object sender, EventArgs e)
        {

        }
    }
}

W razie jakichkolwiek pomyłek z góry przepraszam, uczę się :)

0

nie da się go przerobić - przerobienie oznacza, że zmieni się część (i jak dla mnie ta zmieniana część to będzie mniej niż 50% całości) a tutaj tak naprawdę poza deklaracją zmiennych trzeba by całą resztę napisać od nowa. Zresztą ile tych linijek tu jest 20, 30? że tak ciężko ci chociaż spróbować to ogarnąć? Bo mniemam, że tego kodu sam nie napisałeś...

1 użytkowników online, w tym zalogowanych: 0, gości: 1