Maximallänge eines Vektors setzen.

Neue Frage »

systemchaos Auf diesen Beitrag antworten »
Maximallänge eines Vektors setzen.
Hallo.

Ich schreibe ein Spiel bei dem eine Rakete bewegt werden soll, 2D gesehen.

Das heißt ich habe folgende Vectoren mit 2 Koordinaten: Schub, Bewegung und Position. Bisher alles kein Problem. Ich bewege indem ich Schub auf Bewegung addiere und das dann auf die Position. Gedreht wird indem ich den Schubvector rotiere.

Jetzt möchte ich aber eine Maximalgeschwindigkeit setzen. Unzwar so, dass nur bis zu einer bestimmten Geschwindigkeit beschleunigt wird. Auf X von links nach rechts gesehen ist das nur eine einzige abfrage und gut ist. Aber ich habe das Problem, dass ich 2 Achsen habe auf denen sich mein Vector auch nach rechts und unten bewegen kann. Also in den Minusbereich der jeweiligen Achse und irgendwie scheitern all meine Versuche unglücklich ...

Mach ich nun 4 Abfragen, geht es. Aber es sieht abgehackt und absolut unrealistisch aus. Deswegen dachte ich, dass es vielleicht auch anders geht. Meine Überlegungen sind nun hier stehengeblieben:

Zitat:
(mein post aus einem anderem Forum)
http://www.chaosgarten.de/files/directx/richtung.jpg
VectorC darf nicht länger werden als die Maximalgeschwindigkeit. Sobald ich Schub gebe (VectorB) muss die alte Geschwindigkeit (VectorA) kleiner werden.

Das heißt VectorB wächst und VectorA schrumpft unzwar so, dass VectoC niemals die Maximalgeschwindigkeit überschreitet.

So. Wie mach ich das? Ich mach 2 Vectoren für geschwindigkeit (VectorC). Nämlich Moving (VectorA) und Schub (VectorB). Wie bestimme ich nun die Längen? Es muss Pytagoras her. A² + B² = C² Smile ... Somit ist VectorA = Sqrt(VectorC² - VectorB²). Bei einer Drehung muss die Aktuelle Geschwindigkeit und Richtung VectorA zugewieden werden.

Edit:
Gibt man Gas wird VectorA runtergerechnet weil VectorB hochgerechnet wird. Beides ergibt VectorC. Dreht man die maschiene wird VectorB zurückgesetzt und VectorA = VectorC.
sqrt(2) Auf diesen Beitrag antworten »
RE: Maximallänge eines Vektors setzen.
Zitat:
Original von systemchaos
VectorC darf nicht länger werden als die Maximalgeschwindigkeit. Sobald ich Schub gebe (VectorB) muss die alte Geschwindigkeit (VectorA) kleiner werden.


Ich bin mir nicht sicher, welchen Effekt du damit zu erreichen versuchst. Du kannst doch zunächst Vektor B auf Vektor A addieren und den enstehenden Vektor C auf die gewünschte Länge (die Maximalgeschwindigkeit) bringen:



Die Muliplikation mit dem Skalar geschieht einfach, indem du jede Komponente des Vektors mit dem Skalar multiplizierst; steht für die Länge von .
Poff Auf diesen Beitrag antworten »
RE: Maximallänge eines Vektors setzen.
Relativistisch rechnen wär vielleicht nicht übel, passt sogar,
dort c und hier c musst nur Werte tauschen. Augenzwinkern
systemchaos Auf diesen Beitrag antworten »

Mir ist soeben noch was eingefallen. Ich werde Länge und Richtung der Vektoren trennen. Dann muss ich nur noch die Richtungsvektoren addieren und die Länge ist somit immer positiv. Das kann ich schonmal gut gebrauchen.

Das Problem ist aber immernoch, dass ich einfach nicht verstehe wie ich es machen soll mit der Ausrichtung der Rakete.

Wenn schubrichtung = bewegungsrichtung dann darf nicht beschleunigt werden ... weicht es etwas ab soll wieder gerechnet werden aber auch nur soweit, dass die Geschwindigkeit nicht die maximalgeschwindigkeit überschreitet aber die Rakete die richtung verändert.


Aber ich finde meine Lösung schonmal ganz gut. Ich möchte es so machen: Einheitsvektoren für Schubrichtung und Bewegungsrichtung. Die werden zusammengerechnet und wieder in einen Einheitsvektor verwandelt.



Naja. Ich schreibe später weiter. ... muss erstmal nach Hause smile ...
systemchaos Auf diesen Beitrag antworten »

So. Zu Hause.
Nochmal. In Ruhe.

Ich weiß gar nicht wieso ich es mir so komplex gemacht habe. Aber ich weiß nun, dass es sehr viel einfacher ist als gedacht.

Ich nehme also 2 Vektoren der länge 1: Schubrichtung und Fliegrichtung. Die werden pro Sekunde aufeinander gerechnet (bzw ein bruchteil des Schubvektors pro Frame je nach FPS). Die Geschwindigkeit ist eine eigene Variable. Ist sie Positiv geht's ab nach vorn. Ist sie negativ, dann zurück. Begrenzung der Geschwindigeit dürfte nun kein Problem mehr darstellen.

Wenn die Geschwindigkeit die MaxGeschwindigkeit überschreitet wird die letzte addierte Geschwindigkeit abgezogen und fertig -.- ...
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »