Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Backflip mit Motorrad » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
eulerscheZahl

Um klarzumachen, dass es sich um eine Geschwindigkeit/Beschleunigung mit einer Richtung handelt.

icq: 418863782
Skype: eulersche_Zahl (nutze ich aber fast nie)
Basti

Warum hast du eig Vektoren verwendet? Hast du vl Skype oder so?
Basti

das schaut richtig gut aus. Vielen dank großes Grinsen
eulerscheZahl

Funktioniert noch nicht so richtig, aber worauf es ankommt: Ich habe nur eine Radposition und den Winkel zum anderen Rad gespeichert. So ist die Drehung möglich. Und das beste ist es, die Physik zu definieren, also mit Geschwindigkeit und Beschleunigung zu rechnen.

Dateianhang:
zip backflip.zip (70 KB, 425 mal heruntergeladen)
Basti

Danke übrigens für deine mühe smile

Dateianhang:
zip backflip.zip (60,17 KB, 447 mal heruntergeladen)
eulerscheZahl

Wenn ich das kopiere, wird mir direkt jede 2. Zeile unterstrichen, weil die Hälfte der Variablen fehlt.
Gib mir den kompletten Code (Projektordner als zip) oder lass' es bleiben.
Grafikobjekte wie Graphics oder Pen solltest du übrigens mit Dispose() oder using wieder freigeben, sonst müllst du deinen Speicher voll.
Basti

//Alles im paintereignis ausgegeben

private void pic_Paint(object sender, PaintEventArgs e)
{
Graphics z = e.Graphics; // neue zeichenfläche von ereignis erhalten, e automatisch
z.SmoothingMode = SmoothingMode.AntiAlias; // Keine pixel mehr
Pen p = new Pen(Color.DarkBlue, 3);




Point Zentrum = new Point(pic.ClientSize.Width / 2, pic.ClientSize.Height / 2); // oberer punkt genau in der mitte
Size s = new Size(100, 100); // clientsize damit nur fenster zum abstand berechnet wird

Rectangle r = new Rectangle(Zentrum.X - pic.Width / 2, Zentrum.Y + pic.Height / 2 - 20, 3000, 20); // Boden / Fahrbahn teil1
//andere möglichkeit für eine zeichenfläche
z.DrawRectangle(new Pen(Color.Brown), r);


RectangleF rr = new RectangleF(xrr, yrr, r1, r1); //Rad_hinten
z.DrawEllipse(p, rr);

RectangleF rf = new RectangleF(xrf, yrf, r1, r1); //Rad_vorne
z.DrawEllipse(p, rf);

RectangleF pr = new RectangleF(xpr, ypr, rp, rp); //person
z.DrawEllipse(p, pr);

// Aufhängung hinten

PointF pointe = new PointF(xd1-3, yd1+2);
PointF pointf = new PointF(xrr + 40, yrr - 11);
e.Graphics.DrawLine(new Pen(Color.Red, 5), pointe, pointf);

// Sitz

float xsir, ysi, xsif;

xsir = xrr + 15;
ysi = yrr - 10;
xsif = xrf + 5;
PointF pointa = new PointF(xsir, ysi);
PointF pointb = new PointF(xsif, ysi);
e.Graphics.DrawLine(new Pen(Color.Green, 5), pointa,pointb);

// Aufhängung vorne

PointF pointc = new PointF(xd2+3, yd2+3);
PointF pointd = new PointF(xrf, yrf - 20);
e.Graphics.DrawLine(new Pen(Color.Red, 5), pointc, pointd);

// Motor

PointF[] m = new PointF[5];
m[0] = new PointF(xrr + 40, ysi + 3);
m[1] = new PointF(xpr + 15, ysi + 3);
m[2] = new PointF(xpr + 15, ysi + 10);
m[3] = new PointF(xrr + 40, ysi + 10);
m[4] = new PointF(xrr + 40, ysi + 3);
z.DrawLines(new Pen(Color.Blue, 3), m);

// Mensch

PointF[] x = new PointF[4];
x[0] = new PointF(xpr + 7, ypr + 13); // hals
x[1] = new PointF(xpr - 5, yrr - 15); // becken
x[2] = new PointF(xpr + 10, yrr - 5); // Knie
x[3] = new PointF(xpr - 10, yrr + 5); // fuß
z.DrawLines(new Pen(Color.Black, 3), x);

// Arme

PointF pointg = new PointF(xpr, ypr+20);
PointF pointh = new PointF(xrf+2, yrf - 18);
e.Graphics.DrawLine(new Pen(Color.Black, 3), pointg, pointh);


// Schanze

Pen blackPen = new Pen(Color.Black, 3);

// Create rectangle for ellipse.
RectangleF rect = new RectangleF(xp1, yp1, 400.0F, 700.0F);

// Create start and sweep angles.
float startAngle = 0;
float sweepAngle = -trkschanze.Value;

// Draw pie to screen.
e.Graphics.DrawPie(blackPen, rect, startAngle, sweepAngle);

// Landung
Pen blackPen1 = new Pen(Color.Black, 3);


RectangleF rect1 = new RectangleF(xp1 + 750, yp1, 400.0F, 700.0F);


float startAngle1 = 180.0F;
float sweepAngle1 = trkschanze.Value;


e.Graphics.DrawPie(blackPen1, rect1, startAngle1, sweepAngle1);


}

private void pic_Resize(object sender, EventArgs e)
{
pic.Invalidate();
xrr = 35 + 35;
xrf = 135;
xpr = 100 + 16;
yrf = pic.Height - 73 + 25;
yrr = pic.Height - 73 + 25;
ypr = pic.Height - 120 + 35;
r1 = 25;
rp = 15;
xd1 = 60 + 25;
xd2 = 160 - 15;
xd3 = 113 + 10;
yd1 = pic.Height - 48 + 12;
yd2 = pic.Height - 48 + 12;
yd3 = pic.Height - 107 + 30;

xp1 = 200f;
yp1 = pic.Height - 373;
}

private void btnstart_Click(object sender, EventArgs e)
{
tm1.Enabled = !tm1.Enabled;
}

private void tm1_Tick(object sender, EventArgs e)
{


// Bewegung der X-Achse
if (objPosition == position.Right)
{

xrr += trkspeed.Value;
xrf += trkspeed.Value;
xpr += trkspeed.Value;
xd1 += trkspeed.Value;
xd2 += trkspeed.Value;
xd3 += trkspeed.Value;

pic.Invalidate();
}


}
eulerscheZahl

Auch gut.
Wenn du Hilfe erwartest, musst du mir auch entgegenkommen.
Zitat:
Wie errechnet sich die Winkelgeschwindigkeit (formelmäßig)?

Dein bisheriger Quellcode wäre auch nicht verkehrt.
Basti

Also wir haben das Motorrad selber über graphics gezeichnet und dafür muss man jeden punkt einzeln berechnen damit man es drehen kann.
eulerscheZahl

Zitat:
Windows Forms oder WPF?

Bei WPF kannst du die komplette PictureBox rotieren, bei Windows Forms musst du eben das Motorrad selbst (also das Bitmap) drehen.
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.