Was ist der Unterschied zwischen einer Punkttransformation und einer Vektortransformation?

11

Das hat mir mein Dozent in den Kursen gesagt:

Wir betrachten nur 4 * 4 Matrizen. Diese werden zum Drehen, Skalieren oder Übersetzen von Objekten (oder einer beliebigen Kombination dieser Vorgänge) verwendet. Matrizen werden auch später bei der Implementierung des virtuellen Kameramodells verwendet. Wenn Sie den Unterschied zwischen einer Vektortransformation und einer Punkttransformation nicht kennen, schlagen Sie nach.

Ich kann anscheinend keine Antwort finden und habe nur für diese Frage einen Account für diese Website erstellt.

SA
quelle
1
In Ergänzung zu allen anderen Antworten und weil andere Personen diese Frage bereits an anderer Stelle ausführlich
user18490

Antworten:

9

Hier ist die einfache Antwort.

In 4D werden Vektoren als (x, y, z, 0) und Punkte als (x, y, z, 1) dargestellt, um sie mit einer 4 × 4-Matrix multiplizieren zu können.

Da die 4. Zeile einer 4x4-Matrix die Translation der Matrix darstellt, machen die obigen Darstellungen es so, dass Punkte von der Translation betroffen sind, Vektoren jedoch nicht.

Sowohl Vektoren als auch Punkte werden jedoch von der Drehung, Skalierung usw. beeinflusst.

Vorbehalt:

Es gibt eine tiefere Diskussion, wenn Sie erwarten, dass die Vektoren bestimmte Eigenschaften haben. Wenn Sie beispielsweise die Normalen eines Dreiecks mit derselben Matrix transformieren, mit der Sie die Eckpunkte des Dreiecks transformieren, ist dies wahrscheinlich nicht mehr der Normalenvektor dieses Dreiecks. Dies liegt daran, dass normale Vektoren eine Art umgekehrte Beziehung zu den Eckpunkten haben, aus denen sie berechnet werden.

Alan Wolfe
quelle
Normalen funktionieren nicht, weil sie keine Vektoren sind. Ich kenne jedoch keine gute Einführung in das Konzept.
MB Reynolds
@MBReynolds Im mathematischen Sinne sind Normalen Vektoren wie Punkte oder Richtungen. Das Problem hierbei ist, dass die Transformationen, die wir auf die Punkte einer Oberfläche anwenden, um sie zu transformieren, nicht auf die Normalen zutreffen.
nbro
2
Oberflächennormalen sind Bivektoren, keine Vektoren. Wir können eine Normale durch das Kreuzprodukt zweier Vektoren finden, das Ergebnis ist ein Bivektor. SIEHE Per Vogensen: gist.github.com/pervognsen/c6b1d19754c2e8a38b10886b63d7bf2d
MB Reynolds
4

Da ich auch Student bin, habe ich gelernt, dass Sie mit Matrizen arbeiten möchten, um Rotationen, Skalierungen und Übersetzungen auf die gleiche Weise zu behandeln, dh mit einer Matrix zu multiplizieren (dh eine 4 × 4- Matrix).4×44×4

Denken Sie daran, dass ohne diese Matrizen Übersetzungen durch Summieren mit einem Vektor dargestellt würden, während Rotationen und Skalierung durch Multiplikationen mit einem Vektor bzw. einem Skalarfaktor dargestellt werden.4×4

Die Frage ist nun: Wie gehen wir von einem 3D-Koordinatensystem zu einem 4D-Koordinatensystem über ? Die Antwort lautet " homogene Koordinaten ".

Also, was bedeutet das? Wir konstruieren Matrizen, um Rotationen, Skalierung und Translation darzustellen, so dass wir nur Matrixmultiplikationen verwenden, um Transformationen darzustellen (z. B. Rotationen, Skalierung usw.). Wie wir sie individuell konstruieren, ist spezifischer, aber Sie können es im Web ansehen.4×4

An diesem Punkt haben wir 4×44×43D

Wie machen wir es?

Wir unterscheiden zwischen Richtungs- und Positionsvektoren . Richtungsvektoren haben, wie der Name schon sagt, eine Richtung, in die sie zeigen; Wir kümmern uns auch um ihre Länge, aber sie sind nicht von Übersetzungen betroffen, da wir uns nicht um ihre Position kümmern. Positionsvektoren (oder einfach "Punkte") können verschoben oder verschoben werden. Sie werden normalerweise in Bezug auf den Ursprung dargestellt, dh als Vektor vom Ursprung zum Punkt selbst.

0401

3Dv=(v1v2v3)v=(v1v2v30)u=(u1u2u3)u=(u1u2u31)

3D4th10

nbro
quelle
(wx,wy,wz,w)w0(x,y,z)w=1wauch mit 4D-Matrixmultiplikation.
Ilmari Karonen
2

Wenn Sie die Definition eines Vektors und eines Punkts nachschlagen würden, wäre ein Vektor:

Eine Größe wie die Geschwindigkeit, die vollständig durch eine Größe und eine Richtung spezifiziert ist. http://www.thefreedictionary.com/vector

Und ein Punkt ist:

Ein dimensionsloses geometrisches Objekt, das außer der Position keine Eigenschaften hat. http://www.thefreedictionary.com/point

Man könnte also sagen, dass ein Vektor eine Richtung mit Skalierung ist und ein Punkt ein Ort.

Wenn Sie also einen Vektor transformieren, drehen Sie ihn einfach und skalieren ihn. Mit einem Punkt übersetzen Sie ihn auch (die Drehung und Skalierung eines Punktes erfolgt um den Ursprung herum, da es sich nur um eine Stelle handelt, an der der Punkt selbst nicht gedreht werden kann).

Meistens werden ein Vektor und ein Punkt in denselben Container gestellt, einen Vektor mit 4 Komponenten. Der einzige Unterschied ist die w-Komponente. Wenn die w-Komponente 0 ist, ist es eine Richtung. Wenn es 1 ist, ist der Vektor ein Punkt.

Der Grund dafür liegt in der Matrix selbst. Es nutzt die Art und Weise, wie Sie einen Vektor mit 4 Komponenten mit einer 4x4-Matrix multiplizieren. Wenn Sie nicht wissen, wie das funktioniert, würde ich eine schnelle Google empfehlen.

[rot+scalerot+scalerot+scaletranslationrot+scalerot+scalerot+scaletranslationrot+scalerot+scalerot+scaletranslation0001]

Wie Sie sehen können, haben Sie, wenn die letzte Komponente 0 ist, eine Multiplikation mit 0 und daher ist das Ergebnis 0 und es gibt keine Übersetzung.

Dies erleichtert die Computergrafik mit polygonalen Objekten. Sie haben dieselbe Transformationsmatrix, um die Positionen, aber auch die Normalen zu transformieren. Da die w-Komponente der Normalen auf 0 gesetzt ist und die w-Komponente der Position 1 ist, werden die Normalen nur gedreht (und auch skaliert, was zu seltsamen Dingen führen kann, sodass die Normalität meistens danach normalisiert wird. Es wird nicht empfohlen, dieselbe Matrix für Positionen und Rotationen zu verwenden, da dies seltsam ist. Sehen Sie sich den Kommentar von @JarkkoL an.) Die Positionen werden übersetzt (und um den Ursprung gedreht und skaliert).

Hoffe ich habe keinen Fehler gemacht: P, und das hat dir geholfen!

bram0101
quelle
2
Normalen werden nicht mit derselben Transformationsmatrix wie Positionen transformiert. Sie müssen die Umkehrung der Transponierung der 3x3-Submatrix berechnen, um Normalen für Transformationen mit ungleichmäßiger Skalierung und / oder Verzerrung ordnungsgemäß zu transformieren.
JarkkoL
@ JarkkoL ja das ist wahr, damit hast du recht. Es ist am besten, nicht dieselbe Matrix zu verwenden, aber je nach Implementierung wird dies durchgeführt. In den meisten Fällen ist es den Menschen nicht so wichtig, die Normalen zu verzerren, da sie entweder keine oder nur eine ungleichmäßige Skalierung verwenden. In diesem Teil über das Transformieren von Positionen und Normalen ging es eher darum, dass es nützlich sein könnte, einen Container zu verwenden.
bram0101