Länge eines Vektors in bestimmte Richtung
-
Überschrift klingt bescheuert, ich weiß, aber mir fiel nix besseres ein.
Folgendes Problemchen: Ich hab einen Vektor vPosVelocity, der die Geschwindigkeit eines Objekts beschreibt. Dies ist eine absolute Angabe. Nehmen wir mal an, das Objekt wäre ein Auto. Dann sollte es doch eigtl. möglich sein, seine Geschwindigkeit zu bestimmen - und damit meine ich jetzt nicht die Länge von vPosVelocity, sondern den Weg, den das Objekt pro Zeiteinheit aus seiner Perspektive nach vorne bewegt.(Edit: Wenn das Auto z.B. schleudert bewegt es sich auch seitwärts, diese Bewegung, soll nicht als Geschwindigkeit gewertet werden.) Nach vorne heißt für mich: (0, 0, 1) aus relativer Sicht des Objekts.
Dazu gibt es natürlich auch eine Rotationsmatrix mRotation. Alsov(0, 0, 1) * mRotation = vDir (absoluter Richtungsvektor);
Naja, die Matrix hätt' ich jez gar nich erst erwähnen müssen
. Wir haben also einen absoluten Richtungs- und Bewegungsvektor.
Frage: Wie berechnet man jetzt die Länge von vPosVelocity in Richtung vDir?
Mr Train
-
Man projiziert den einen auf anderen und bestimmt seine Laenge.
-
vDir normieren (falls er das nicht schon ist) und das Standardskalarprodukt bilden. Daraus dann die wurzel ziehen und du hast die 2-norm deines vektors in dieser richtung.
-
Heinzelotto schrieb:
Daraus dann die wurzel ziehen
Aha? Und ich muss die Geschwindigkeit vervierfachen, um ihre vDir-Komponente zu verdoppeln?
@op:
Schau dir die Projektion an. Bekanntlich gilta*b = |a| |b| cos(theta)
wobei theta der winkel zwischen den vektoren ist. Nun ist aber
a*b / |b| = |a| cos(theta)
die länge der Projektion von a auf b (definition des cosinus ansehen)
-
v = vPosVelocity a = vDir Projektion von v auf a: <v,a>/<a,a> * a Länge von v in Richtung a: |<v,a>| ------- ||a||
-
Okay, vielen Dank!
Ich frag mich, warum ich von der Projektion eines Vektors noch nie was gehört hatte. Naja wieder was dazu gelernt.Mr Train