Vektor - Geschwindigkeit Grenze Setzen
-
Hi,
ich hab jetzt bei meinem 2D - Space - Shooter einen Geschwindigkeitsvektor fuer die Bewegung - wie kann ich den jetzt "maximieren", zB. als max. 15 Pixel pro Frame
Den Betrag, also die Laenge des Vektors hab ich, aber wenn ich einfach die Bewegung "blocke", kann ich ja auch nicht mehr bremsen
-
Geschwindigkeitsvektor
Geschwindigkeitsvektor oder Geschwindigkeitsfaktor? Normalerweise multipliziert man einen Vektor mit einem Faktor und nicht mit Frames/sec.
-
Ja genau das mach ich
-
naja so:
if(vektor.x >= 15.0f) vektor.x = 15.0f; if(vektor.y >= 15.0f) vektor.y = 15.0f;
wenns dir dabei um den betrag des vektors geht:
if(rechne_betrag_von_vektor_aus(vektor) >= 15.0f) { float teil_faktor = sqrt((pow(vektor.x,2) + pow(vektor.y,2))/15.0f); vektor.x /= teil_faktor; vektor.y /= teil_faktor; }
Und schon hat dein Vektor den maximalen Betrag von 15.0f.
edit: vielleicht gleich bissel ausführlicher:
float teil_faktor = sqrt((pow(vektor.x,2) + pow(vektor.y,2))/15.0f);
bekommste daher:
> \sqrt{x^2 + y^2} * \frac{1}{k} = 15
> k = \sqrt{\frac{x^2+y^2}{15}}
-
Deine Formel ist falsch.
-
this->that schrieb:
Deine Formel ist falsch.
jap, leichtsinnsfehler:
-
Thx, funktioniert
-
Übrigens: Statt den Betrag zweier Vektoren zu vergleichen, kann man direkt das Quadrat des Betrags vergleichen (z.B. durch Skalarprodukt mit sich selbst), das erspart das eher aufwändige Wurzelziehen.