[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions_content.php on line 1014: Undefined array key 3
qtforum.de • Darstellung schräger Wurf
Seite 1 von 1

Darstellung schräger Wurf

Verfasst: 21. April 2008 22:52
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

Re: Darstellung schräger Wurf

Verfasst: 22. April 2008 07:42
von macman
Guck dir mal das Tutorial an.

Verfasst: 22. April 2008 10:52
von morpheuss
Hi,

ja, genau aus dem Tutorial kommt ja meine Frage :)

Verfasst: 22. April 2008 11:01
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.

Verfasst: 22. April 2008 11:03
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.

Verfasst: 22. April 2008 17:56
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 ;)

Verfasst: 22. April 2008 23:32
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

Verfasst: 23. April 2008 09:06
von upsala
QPainterPath::cubicTo()
QPainterPath::pointAtPercent()

QPen::setWidth()

QPolygon()

Und C++-Grundlagen.

Habe ich irgendetwas, außer dem fertigen Programm vergessen?

Verfasst: 23. April 2008 09:37
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).

Verfasst: 28. April 2008 20:32
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?