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ę :)