Nehmen wir an, ich habe einen willkürlichen Vektor A. Was ist der effizienteste Weg, um die Größe der Vektoren um einen beliebigen Betrag zu reduzieren?
Meine aktuelle Methode ist wie folgt:
%Vor%Gibt es einen effizienteren Weg, dies zu tun? Möglicherweise Entfernen der Quadratwurzel erforderlich, um B zu normalisieren ...
Wenn ich Sie also richtig verstehe, haben Sie einen Vektor A
, und wollen einen anderen Vektor, der in die gleiche Richtung wie A
zeigt, aber um reductionLength
kürzer ist, oder?
Hat die Vector
-Schnittstelle etwas wie eine "length" -Memberfunktion (gibt die Länge des Vektors zurück)? Dann denke ich, dass das Folgende effizienter sein sollte:
Wenn Sie einen Vektor skalieren, indem Sie ihn mit einem Skalarwert multiplizieren, sollten Sie nicht normalisieren. Nicht aus Effizienzgründen; weil das Ergebnis nicht das ist, was Sie wahrscheinlich wollen.
Nehmen wir an, Sie haben einen Vektor, der so aussieht:
%Vor% Seine Größe ist sqrt(3^2 + 4^2) = 5
. Also normalisieren wir es:
Dieser Vektor hat die Größe 1; es ist ein Einheitsvektor.
Also, wenn Sie jeden um einen Faktor von 0,5 "verkürzen", was bekommen Sie?
%Vor%Nun normalisieren wir es nach seiner Größe sqrt (6.25):
%Vor%Wenn wir mit dem Einheitsvektor das Gleiche machen:
%Vor%Das sind nicht die gleichen Dinge. Ihre Methode macht zwei Dinge, und sie sind nicht kommutativ.
Tags und Links math c++ vector linear-algebra