Hauptinhalt
Kurs: Programmierung > Lerneinheit 5
Lektion 4: Vektoren- Einführung in die Vektoren
- Challenge: Vektor-Walker
- Mehr Vektormathematik
- Challenge: Lichtschwert
- Größenordnung & Normalisierung von Vektoren
- Challenge: Grafische Darstellung des Betrags
- Vektorbewegung
- Challenge: Bremsendes Auto
- Statische Funktionen vs. Instanzmethoden
- Challenge: Statische Funktionen
- Interaktive Vektorbewegung
- Challenge: Mausverfolger
- Projekt: Computerkreaturen
© 2024 Khan AcademyNutzungsbedingungenDatenschutzerklärungCookie-Meldung
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.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 Quadrat plus Quadrat gleich Quadrat.
Bewaffnet mit dieser Formel, können wir nun den Betrag von wie folgt berechnen:
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 , wird sein Eineheitsvektor (geschrieben als ) folgendermaßen berechnet:
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.