Was ist an Vektoren so anders / kompliziert / nützlich?

21

Verzeihen Sie mir, wenn dies keine echte Frage ist, aber ich bin wirklich verwirrt.

Ich höre ständig andere Spieleentwickler, die darüber sprechen, wie nützlich die Verwendung von Vektoren ist, aber auch, wie sich jeder von der Vektormathematik einschüchtern lässt und Vektoren entmutigend wirken können. Ich bin noch nie dazu gekommen, etwas über sie zu lernen.

Also habe ich endlich mal bei Wikipedia nach Vector gesucht und war überrascht. Sofern ich mich nicht irre, ist ein Vektor (der Einfachheit halber heißt er 2D) nur eine x- und eine y-Koordinate. Wenn ich falsch verstanden habe, korrigieren Sie mich bitte.

Hier ist meine Frage: Bedeutet das nicht, dass jede Darstellung von zwei (oder dreidimensionalen) Koordinaten ein Vektor ist? Wenn ja, dann sind Vektoren und Koordinaten dasselbe. Und es ist so gut wie unmöglich, ein Spiel ohne die Verwendung von Koordinaten zu erstellen. Wie verwirren Vektoren jemanden oder sind sie neu für jemanden, der bereits umfangreiche Spielprogramme erstellt hat?

Dies ist etwas, über das ich etwas Aufklärung gebrauchen könnte. Jede Hilfe wird geschätzt.

Sternenhimmel
quelle
5
Vektoren sind ziemlich einfach, bis Sie anfangen, Rotationen in 3D auszuführen ... dann brauchen Sie Quaternionen, und diese werden Sie umhauen.
Alistair Buxton
Der Begriff des Vektors ist wirklich verwirrend. Ich habe in Mathe gefragt , math.stackexchange.com/questions/429363 , math.stackexchange.com/questions/384927 , aber keine klare Antwort erhalten. Es ist pure Frustration. Vielleicht können Sie es hinzufügen.
Val
1
Bei all den schlechten Analogien in diesen Antworten ist es kein Wunder, dass die Leute verwirrt werden.
Alistair Buxton

Antworten:

29

Lassen Sie sich nicht von einem Mathematik-Major dazu bringen, Vektoren-Punkte oder -Koordinaten zu nennen!

Ein 2D-Vektor hat eine x- und eine y- Komponente , keine Koordinate. Vektoren definieren keine Position, sie definieren eine Richtung und eine Größe.

Ich kann dir nicht sagen, warum die Leute von ihnen eingeschüchtert werden, wahrscheinlich aus demselben Grund, aus dem die Leute im Allgemeinen von Mathematik eingeschüchtert werden, weil alle sagen, es sei schwer, bevor sie etwas darüber wissen!

Vektoren und Koordinaten sind nicht dasselbe. Sie sehen zwar ähnlich aus, aber ihre Verwendung ist sehr unterschiedlich.

Koordinaten definieren eine Position in der Welt. Vektoren definieren eine Richtung und Größe. Die beiden werden oft zusammen verwendet. Als Beispiel:

Ein Charakter hat eine Position und eine Geschwindigkeit. Die Position ist eine Koordinate und die Geschwindigkeit ist ein Vektor. Das Hinzufügen der Geschwindigkeit zur Position verschiebt das Zeichen in Richtung des Vektors in einem Abstand, der durch die Größe des Vektors definiert wird (beachten Sie, dass die Größe des Vektors die Geschwindigkeit ist, sodass wir eine Richtung und eine Geschwindigkeit erhalten).

Oder in diesem Beispiel:

Bildbeschreibung hier eingeben

Die beiden Zeichen haben Positionen und der Laserschuss ist ein Vektor. Ein Vektor zwischen den beiden Positionen ist (3,1). Das heißt, es bewegt sich +3 entlang der X-Achse und +1 entlang der Y-Achse. Wo die Größe mit Sqrt ((X X) + (Y Y)) gefunden werden kann.

Einen guten Überblick über Vektormathematik finden Sie im Wolfire-Blog

MichaelHouse
quelle
7
Es sind nicht nur Mathematiker, die sich aufregen, wenn jemand einem Vektor einen Punkt oder eine Koordinate nennt. Wir Physiker werden Sie auch vermasseln.
TASagent
2
+1 Aber wenn ich nicht picke, ist die Geschwindigkeit ein Vektor und die Geschwindigkeit ist die Größe dieses Vektors.
Ergwun
2
@Val: Ich würde nicht sagen, dass es Unsinn ist. Es geht auf das Missverständnis der Frage ein, dass Vektoren nur x- und y-Koordinaten sind. Eine formalere oder genauere Beantwortung durch Erwähnung von „Elementen des Vektorraums“ würde niemandem nützen, außer der Erklärung, warum die Menschen Vektoralgebra als einschüchternd empfinden.
Marcks Thomas
3
Die Vektoren sind nur eine Position, an der Sie sehen, wo Sie sich befinden würden, wenn Sie sie auf (0,0) anwenden würden. Vektoren können eine Position ändern, enthalten jedoch keine Positionsinformationen. Ich verstehe was du sagst. Ich denke, der Unterschied, über den wir sprechen, ist für diese Frage nicht von Bedeutung. Auf diese Weise werden Vektoren in der Spieleentwicklung verwendet. Danke für deinen Beitrag.
MichaelHouse
4
@Val: Jede gute Vorlesung über lineare Algebra wird mit Byte56 übereinstimmen: Vektoren sind nicht die gleichen wie Positionen im Raum . Es ist sinnvoll, "3 Meilen nördlich und 1 Meile östlich" zu "1 Meile südlich" hinzuzufügen; aber es macht keinen Sinn, "die Position des Weißen Hauses" zu "die Position des Pentagons" hinzuzufügen. Wenn Sie den Bezugspunkt als (0,0) festgelegt haben, können Sie mithilfe von Vektoren Punkte bestimmen und umgekehrt. In einigen Darstellungen sehen sie also ähnlich aus. aber sie sind anders. Abstractly: Vergleichen affinen Raum vs. Vektorraum .
PLL
9

Ich denke, der Einschüchterungsfaktor kann auftreten, wenn Sie kompliziertere Operationen wie Normalisierung, Punkt- und Kreuzprodukte ausführen und mehrere Koordinatensysteme mit Matrizen verwenden, um zwischen diesen zu transformieren. Diese sind zunächst nicht unbedingt leicht zu verstehen, selbst wenn Sie einen starken Geometrie- und Algebra-Hintergrund haben.

Zumindest in den USA sind die Leute, die die typische High-School-Mathe-Sequenz durchlaufen haben, es gewohnt, über Geometrie in Bezug auf Linien, Steigungen, Winkel usw. nachzudenken. Sie müssen diese Dinge bis zu einem gewissen Grad verlernen und lernen Denken Sie stattdessen in Vektoren und Matrizen darüber nach. Es ist nicht so, dass die Konzepte der linearen Algebra eine solche Strecke sind, sondern dass sie eine etwas andere Menge von Konzepten sind als diejenigen, die in der klassischen Geometrie verwendet werden und die Menschen wahrscheinlich in der Schule gelernt haben.


Übrigens liegt der Unterschied zwischen Vektoren und Punkten in den Operationen, die Sie an ihnen ausführen können. Obwohl beide (in einem bestimmten Koordinatensystem) durch eine Liste von Komponenten dargestellt werden und daher "gleich" aussehen, sind die zulässigen Vorgänge nicht gleich. Sie können beispielsweise zwei Vektoren hinzufügen oder einen Vektor mit einem Skalar multiplizieren. Mit Punkten geht das nicht - oder zumindest macht das keinen Sinn. Sie können jedoch zwei Punkte subtrahieren, und das Ergebnis ist ein Vektor von einem Punkt zum anderen. Sie können einem Vektor auch einen Punkt hinzufügen, um einen neuen Punkt zu erhalten.

Punkte und Vektoren verhalten sich auch in Bezug auf Transformationen unterschiedlich. Punkte unterliegen nämlich der Translation, Vektoren hingegen nicht. Betrachten Sie das Beispiel eines Objekts, das sich mit einer Position (Punkt) und einer Geschwindigkeit (Vektor) bewegt. Wenn Sie das Objekt an einen anderen Ort verschieben, ändern Sie seine Position, aber nicht seine Geschwindigkeit.

Tatsächlich gibt es nicht nur Vektoren, um diese Argumentation zu unterstützen. Es gibt andere Entitäten wie Covectors und Bivectors , die in Bezug auf eine Liste von Komponenten in einem Koordinatensystem ebenfalls wie ein Vektor "aussehen", sich jedoch in Bezug auf die verfügbaren Operationen und die Art und Weise, wie sie auf Transformationen reagieren, unterschiedlich verhalten. Diese gehören alle zu einer mathematischen Disziplin namens Grassmann-Algebra . Darüber hinaus kann man noch allgemeiner sein und Tensoralgebra betrachten . Dies ist jedoch fortgeschrittenes Zeug.

Nathan Reed
quelle
1
Ein großer Teil meiner Verwirrung war, warum die Leute dachten, Vektoren seien so kompliziert, und das half. Vielleicht finde ich sie einfach, weil ich tatsächlich Geometrie in der Programmierung verwendet habe, bevor ich jemals eine Highschool-Geometrie gemacht habe.
Starscape
1
Das Beispiel für Position vs. Geschwindigkeit, das in einigen Antworten verwendet wird, bricht zusammen, wenn Sie Position (Punkt), Geschwindigkeit (Vektor) und Beschleunigung (Vektor) haben. Wenn Sie die Geschwindigkeit ändern, ändert sich die Beschleunigung nicht, sie sind jedoch beide Vektoren. Die Unterscheidung zwischen Vektor und Punkt ist zwar korrekt, aber eine Ablenkung - in der Praxis speichern alle Spiele Positionen als Vektoren, die implizit relativ zum Ursprung sind (möglicherweise indirekt, wenn ein Szenendiagramm verwendet wird).
Alistair Buxton
1
@AlistairBuxton Ich folge Ihrem Punkt nicht - wenn Sie Ihr Koordinatensystem verschieben, ändern sich weder die Geschwindigkeit noch die Beschleunigung eines Objekts, aber wenn Sie die Koordinaten drehen, werden sowohl die Geschwindigkeit als auch die Beschleunigung gedreht. Ich sehe also nicht, wo etwas "kaputt geht".
Nathan Reed
2
@AlistairBuxton "Positionen als Vektoren speichern" gibt es nicht. Spiele speichern sowohl Positionen als auch Vektoren als Listen skalarer Komponenten in einem bestimmten Koordinatensystem. Das macht sie nicht gleich. Um eine Analogie zu ziehen: Ints und Floats werden beide als Liste von Binärbits gespeichert, haben jedoch unterschiedliche Bedeutungen und unterschiedliche Operationen.
Nathan Reed
1
@Val Du bist völlig verrückt. Ein Vektor ist nicht [p-Position, v-Geschwindigkeit]. Es enthält weder einen Punkt noch eine Geschwindigkeit. Es ist nur [x-Geschwindigkeit, y-Geschwindigkeit, z-Geschwindigkeit] (für einen Geschwindigkeitsvektor). Der Punkt ist, dass dies eine andere Art von Dingen ist als [x-Position, y-Position, z-Position].
Nathan Reed
7

Vektoren sind wirklich nicht so schlimm. Es gibt nur ein bisschen Mathe, mit dem die Leute nicht vertraut sind.

In erster Linie repräsentiert ein Vektor keine Position im Raum. Dies ist konzeptionell sehr wichtig. Ein Vektor repräsentiert eine Richtung wie 'Nord' und eine Größe. Auf einer Karte mit normalen mathematischen XY-Koordinaten ist "Nord" der Vektor (0,1) (oben auf der Y-Achse). Dies sollte nicht mit der Position (0,1) verwechselt werden, die eine Einheit über der Position liegt, an der Sie den Ursprung setzen. Ein Vektor ist eine Richtung und eine Größe .

Verschiebung (Bewegung) ist ein Vektor (wie zwei Einheiten nach oben und eine Einheit nach rechts bewegen), Position ist nicht.

Vektoren sind für sich genommen nicht das, womit Menschen ein Problem haben. Normalerweise sind es Matrizen und Operationen auf Vektoren.

Wenn Sie beispielsweise einen Vektor mit einer speziellen Matrix multiplizieren, die als "Rotationsmatrix" bezeichnet wird, wird der Vektor um den in der Matrix angegebenen Betrag gedreht. Darüber hinaus haben einige Personen Probleme mit der Matrixmultiplikation. Schlagen Sie nach, wenn Sie damit nicht vertraut sind.

Außerdem können Sie diese Matrizen (oder Operationen) zusammen stapeln. Drehen Sie um 90 Grad um die X-Achse und dann um 90 Grad um die Y-Achse. Wenn wir die erste Matrix M und die zweite Matrix N nennen, wäre die Operation v * M * N. Die Matrixmultiplikation ist jedoch nicht kommutativ, sodass sie nicht mit v * N * M identisch ist.

In der Grafikprogrammierung führen Sie regelmäßig erheblich kompliziertere Operationen an Vektoren und anderen Matrizen durch. Transformationen für FoV und das Einfügen Ihrer Koordinaten in den Bildschirmbereich usw. Es ist wirklich nicht so schlimm, aber für neue Leute kann es einschüchternd sein.

TASagent
quelle