Darstellung schräger Wurf

Alles rund um die Programmierung mit Qt
Antworten
morpheuss
Beiträge: 10
Registriert: 27. März 2008 15:36

Darstellung schräger Wurf

Beitrag von morpheuss »

Hallo,

ich möchte in einem Programm für einige Sekunden die Wurfbahn eines schrägen Wurfs mit gegebenem Startwinkel und gegebener Startgeschwindigkeit anzeigen.
Mit drawEllipse habe ich es versucht, jedoch scheint der schräge Wurf nicht unbedingt einer Ellipse folgen zu wollen :)
Hat jemand eine Idee, wie ich es stattdessen korrekt realisieren könnte?

Beste Grüße, Chris
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Darstellung schräger Wurf

Beitrag von macman »

Guck dir mal das Tutorial an.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
morpheuss
Beiträge: 10
Registriert: 27. März 2008 15:36

Beitrag von morpheuss »

Hi,

ja, genau aus dem Tutorial kommt ja meine Frage :)
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Ach so, jetzt versteh ich, Du willst eine Vorschau ins Tutorial bauen. Wo bleibt dann der Spielspaß? :-) Da es mit einer Ellipse nicht geht, wirst Du ein Polygon nehmen müssen.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
morpheuss
Beiträge: 10
Registriert: 27. März 2008 15:36

Beitrag von morpheuss »

Hehe :) Nee, ich bin ja nach wie vor blutiger QT-Anfänger. Und da sind die zusätzlichen Übungen im Tutorial eine prima Sache, um selbst mal tätig zu werden.
Also, ich hab jetzt nen Cheat-Button ins Programm eingebaut. Der blendet die Flugbahn (via Timer) für ein paar Sekunden ein. Na mal sehen, wie das als Polygon funktionieren könnte.
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

Also, ich hab jetzt nen Cheat-Button ins Programm eingebaut.
Aber bitte nicht sichtbar.... :) , du musst irgend eine komische Tastenkombination (z.B. 4xNachOben, 2xLinks, 2xRechts...) drücken um den Cheat-Button zu aktivieren ;)
morpheuss
Beiträge: 10
Registriert: 27. März 2008 15:36

Beitrag von morpheuss »

*lol* Ich bin froh, wenn es überhaupt erstmal geht :)

Ich habe jetzt eine Polygonlinie mit 40 Punkten (ausreichend genaue Darstellung) erzeugt, welche die Flugbahn auf Knopfdruck darstellt:

Code: Alles auswählen

void CannonField::paintCheat(QPainter &painter)
{	
	QPainter painter2(this);
	painter2.setPen(Qt::black);
	painter2.setPen(Qt::DashLine);	

        ... bla bla ...

	int i;
	double x[40];
	double y[40];
	
	x[0] = bla;
	y[0] = bla;

	for(i = 1; i < 40; i++)
	{
		x[i] = bla;
		y[i] = bla;

	};
		
	QPointF points[40] =
	{
		QPointF(x[0], y[0]),
		QPointF(x[1], y[1]),
		QPointF(x[2], y[2]),
		QPointF(x[3], y[3]),
		QPointF(x[4], y[4]),
		QPointF(x[5], y[5]),
		QPointF(x[6], y[6]),
		QPointF(x[7], y[7]),
		QPointF(x[8], y[8]),
		QPointF(x[9], y[9]),
		QPointF(x[10], y[10]),
		QPointF(x[11], y[11]),
		QPointF(x[12], y[12]),
		QPointF(x[13], y[13]),
		QPointF(x[14], y[14]),
		QPointF(x[15], y[15]),
		QPointF(x[16], y[16]),
		QPointF(x[17], y[17]),
		QPointF(x[18], y[18]),
		QPointF(x[19], y[19]),
		QPointF(x[20], y[20]),
		QPointF(x[21], y[21]),
		QPointF(x[22], y[22]),
		QPointF(x[23], y[23]),
		QPointF(x[24], y[24]),
		QPointF(x[25], y[25]),
		QPointF(x[26], y[26]),
		QPointF(x[27], y[27]),
		QPointF(x[28], y[28]),
		QPointF(x[29], y[29]),
		QPointF(x[30], y[30]),
		QPointF(x[31], y[31]),
		QPointF(x[32], y[32]),
		QPointF(x[33], y[33]),
		QPointF(x[34], y[34]),
		QPointF(x[35], y[35]),
		QPointF(x[36], y[36]),
		QPointF(x[37], y[37]),
		QPointF(x[38], y[38]),
		QPointF(x[39], y[39]),
	};
    painter2.drawPolyline(points, 40);
    update();
}
Das ganze "bla bla" steht für Deklarationen und Berechnungen der Flugbahn. Das hab ich mal entfernt, damit man den Code schneller überfliegen kann.

Gibt es eine geschicktere Variante, um das Punkt-Array zu erzeugen? Ich wollte das direkt in eine for-Schleife packen, hab den Compiler aber nicht überzeugen können :)

Und: solange diese Vorschau-Flugbahn eingeblendet wird kann ich zwar einen richtigen "Schuß" abfeuern, dieser bewegt sich jedoch nur sehr langsam, solange die Flugbahn eingeblendet wird. Ist diese wieder weg, bewegt sich der Schuß ganz normal schnell. Was verlangsamt mein Programm so sehr?

Noch eine Frage: wie kann ich die Linienstärke meiner Vorschau-Flugbahn erhöhen?

Beste grüße, Chris
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QPainterPath::cubicTo()
QPainterPath::pointAtPercent()

QPen::setWidth()

QPolygon()

Und C++-Grundlagen.

Habe ich irgendetwas, außer dem fertigen Programm vergessen?
dontinelli
Beiträge: 146
Registriert: 22. September 2006 20:53

Beitrag von dontinelli »

vielleicht noch zum physikalischen/mathematischen hintergrund: die beschriebene linie ist ein segment einer parabel, nicht einer ellipse (wie du ja schon herausgefunden hast).
morpheuss
Beiträge: 10
Registriert: 27. März 2008 15:36

Beitrag von morpheuss »

Hallo liebe Leute,

erstmal peinlich peinlich dass ich das mit der Ellipse überhaupt versucht habe. Dabei studiere ich Elektrotechnik, oh Gott oh Gott :)

Dann nochmal sorry, dass ich zu blöde war, die QPoints in einer Schleife mit Werten zu belegen. Natürlich geht das ohne Weiteres, ich hab mich nur zu doof angestellt.

SetWidth() hätte ich mit einem Bick in die Doku sofort gefunden.

Die Verwendung von cubicTo() verstehe ich allerdings noch nicht so ganz. Was genau hat es mit den Kontrollpunkten auf sich?
Wäre nicht quadTo() angemessener?

Schleierhaft ist mir außerdem noch, warum ein abgefeuerter Schuß im Programm im Flug auf einmal langsamer wird, wenn ich die Flugbahn (als Cheat) einblenden lasse... Da geht auch die CPU-Belastung auf 100% hoch. Da stimmt doch was nicht, oder?
Antworten