If you're seeing this message, it means we're having trouble loading external resources on our website.

Wenn du hinter einem Webfilter bist, stelle sicher, dass die Domänen *. kastatic.org und *. kasandbox.org nicht blockiert sind.

Hauptinhalt

Größenordnung & Normalisierung von Vektoren

Wie wir soeben gesehen haben, kann mit der Multiplikation und Division die Länge eines Vektors geändert werden, ohne seine Richtung zu verändern. Vielleicht fragst du dich: “Ok, und wie wissen wir was die Länge eines Vektors ist? Ich kenne zwar die Komponenten (x und y), aber wie lang (in Pixel) ist der Pfeil?” Es ist sehr hilfreich und wichtig, zu verstehen, wie die Länge (also der Betrag) eines Vektors berechnet wird.
Abbildung 1.10: Die Länge oder der “Betrag” eines Vektors v wird oft als ||v|| geschrieben
Beachte, dass der Vektor, welcher im Diagramm oben als Pfeil mit zwei Komponenten (x und y) gezeichnet wurde, ein rechtwinkliges Dreieck bildet. Die Schenkel sind die Komponenten und die Hypotenuse ist der Pfeil selbst. Wir können froh sein, dass wir ein rechtwinkliges Dreieck haben. Denn es gab einmal einen griechischen Mathematiker, welcher Pythagoras hieß, der eine schöne Formel, welche die Beziehung von Schenkel und Hypotenuse beschreibt, entwickelt hat.
Der Satz des Pythagoras ist a Quadrat plus b Quadrat gleich c Quadrat.
Bewaffnet mit dieser Formel, können wir nun den Betrag von v wie folgt berechnen:
||v||=vxvx+vyvy
Im Objekt PVector ist dies folgendermaßen implementiert:
PVector.prototype.mag = function() {
    return sqrt(this.x*this.x + this.y*this.y);
};
Das folgende Beispiel stellt den Betrag eines Vektors mit einem Balken am oberen Rand dar:
Den Betrag eines Vektors zu berechnen ist jedoch erst der Anfang. Die Betrags-Funktion öffnet uns die Türen für viele neue Möglichkeiten. Die erste davon ist die Normierung. Mit der Normierung bezeichnen wir den Prozess mit dem wir etwas “standardisieren” oder ganz einfach “normal” machen. Im Falle der Vektoren sagen wir einfach, dass ein Standardvektor die Länge 1 hat. Um einen Vektor zu normieren, nehmen wir daher einen beliebigen Vektor, behalten seine Richtung bei, und ändern seine Länge auf 1, um ihn somit in einen Einheitsvektor umzuwandeln.
Da er die Richtung eines Vektors unabhängig von seiner Länge beschreibt, ist der Einheitsvektor sehr nützlich. Wir werden dies sehen, wenn wir im nächsten Abschnitt mit Kräften arbeiten werden.
Für jeden gegebenen Vektor u, wird sein Eineheitsvektor (geschrieben als u^) folgendermaßen berechnet:
u^=u||u||
Mit anderen Worten, um einen Vektor zu normieren, dividieren wir jede seiner Komponenten durch seinen Betrag. Das ist ziemlich intuitiv. Wenn ein Vektor eine Länge von 5 hat. Nun, 5 dividiert durch 5 ist 1. Wenn wir unser rechtwinkliges Rechteck anschauen, müssen wir die Hypotenuse herunterskalieren, indem wir sie durch 5 teilen. In diesem Prozess werden die Schenkel ebenfalls durch 5 geteilt.
Im Objekt PVector wird unsere Normalisierungs-Funktion daher so implementiert:
PVector.prototype.normalize = function() {
  var m = this.mag();
  this.div(m);
};
Natürlich gibt es da ein kleines Problem. Was passiert wenn der Betrag des Vektors 0 ist? Wir können nicht durch 0 dividieren! Dies müssen wir mit einer Fehlerprüfung verhindern:
PVector.prototype.normalize = function() {
  var m = this.mag();
  if (m > 0) {
    this.div(m);
  }
};
Hier ein Programm, welches den Vektor, welcher die Mausposition vom Zentrum repräsentiert, normiert, und ihn dann multipliziert, damit wir ihn sehen können (1 Pixel ist zu klein!):

Der Kurs "Natürliche Simulationen" ist eine Bearbeitung von "The Nature of Code" von Daniel Shiffman, und wird unter der Creative Commons Attribution-NonCommercial 3,0 Unported Lizenz verwendet.

Willst du an der Diskussion teilnehmen?

Noch keine Beiträge.
Verstehst du Englisch? Klick hier, um weitere Diskussionen auf der englischen Khan Academy Seite zu sehen.