PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vektoren/Matrizen usw. einfach erklärt


druggedApE
2004-09-15, 20:26:08
hi,
ich würd ganz gern ein wenig opengl programmierung machen, c/c++ kann ich soweit, das prob is nur das ich die grundlegende mathematik noch net in der schule hatte :( kennt ihr zufällig ne page in der das einfach erklärt wird?
thx!

grüße
steve

Gast
2004-09-15, 21:24:07
versuch' mal die (http://www.zfx.info/) hier. ist nicht schlecht.

mrdigital
2004-09-16, 00:14:38
hi,
ich würd ganz gern ein wenig opengl programmierung machen, c/c++ kann ich soweit, das prob is nur das ich die grundlegende mathematik noch net in der schule hatte :( kennt ihr zufällig ne page in der das einfach erklärt wird?
thx!

grüße
steve
Hmm fangen wir an (erstmal ganz Abstrakt und dann hoffentlich ein bisschen Konkreter;) )
Ein Vektor ist eine Zahl. Allerdings ist hier der Begriff "Zahl" stark erweitert. Dieser Vektor ist nun eine Zahl, die sich aus mehreren Komponenten zusammensetzt. Ein Vektor, der nur aus einer Komponente besteht ist ein Skalar. Mit diesen Vektoren sind im Prinzip auch alle Rechenoperationen (wie mit den "alten" Zahlen, den Skalaren) möglich, allerdings gibt es hier einige Regeln zu beachten, denn nicht alle Rechenoperationen, die mit Skalaren Sinn machen, sind auf Vektoren sinnvoll, bzw man muss sie sich erstmal "neu" definieren.
Also, wie sieht nun ein Vektor aus? Nehen wir mal einen Vektor, der aus 3 Komponenten besteht: (a | b | c). a, b und c sind die Komponenten und diese sind voneinander unabhängig! Jede dieser Komonenten ist eine ganz gewöhnliche Zahl. Wenn man nun zwei Vektoren addieren möchte, dann get man dabei komponentenweise vor, d.h. die zusammengehörigen Komponenten werden aufaddiert.
(a | b | c) + (d | e | f) = (a+d | b+e | c+f)
analog dazu die Subtraktion.
Dabei sieht man, dass man nur Vektoren, die aus der gleichen Anzahl Komponenten bestehen, aufaddieren / subtrahieren kann.
Was ist nun aber mit Multiplikationen und Divisionen?
Hier gibt es nun mehrere Möglichkeiten und man muss sich nun überlegen, was man denn genau machen möchte.
Man kann ein Skalar mit einem Vektor oder zwei Vektoren miteinander vermultiplizieren.

Skalar mit Vektor:
e * (a | b | c) = (e*a | e*b | e*c)

Zwei Vektoren miteinander ist aber schon schwieriger, hier gibt es mehrere sinnvolle und weniger sinnvolle Möglichkeiten ;)

Das Skalarprodukt (macht aus zwei Vektoren ein Skalar):
(a | b | c) * (d | e | f) = a*d + b*e + c*f

Und das Vektor oder Kreuzprodukt (macht aus zwei Vektoren wieder einen Vektor, allerdings macht es nur bei 3 dimensionalen Vektoren Sinn):
(a | b | c) x (d | e | f) = (b*f - c*e | c*d - a*f | a*e - b*d )

So das war nun alles recht Abstrakt. Konkret kann man sich im Dreidimensionalen recht gut als Koordinaten zu einem Punkt im Raum vorstellen. Dabei ist es wichtig, dass man sich ein für alle Vektoren gleiches Bezugssystem wählt, den "Ursprung" sozusagen. Von diesem Ursprung aus gibt es nun drei Achsen, idR x, y und Z-Achse getauft. Um nun zu einem Punkt im Raum zu gelangen, muss man die Achsen entsprechend lang laufen (z.B drei Einheiten nach rechts, zwei nach oben und vier nach hinten, das gibt den Vektor (3 | 2 | 4).

Wenn ich in den nächsten Tagen wieder ein wenig Zeit hab gehts weiter ;)

Gnafoo
2004-09-16, 15:08:34
Ein paar Anmerkungen:

Die Vektoren werden normalerweise in Klammern geschrieben, in denen die einzelnen Elemente übereinander angeordnet sind. Achtung ASCII-Art :D


/ 0 \ / 1 \ / 1 \
| 5 | + | 2 | = | 7 |
\ 7 / \ 3 / \ 10 /

Vektoren sind im 3D-Raum eigentlich nur Beschreibungen von Richtungen und Längen in einem.
Sie zeigen von einem (nicht durch den Vektor definierten) Bezugspunkt in eine bestimmte Richtung und haben eine bestimmte Länge. Deshalb stellt man Vektoren als einen Pfeile dar, die eine bestimmte Richtung und Länge haben.

Ortsvektoren:
Zu jedem Punkt kann man dessen Ortsvektor bilden. Das ist ein Vektor mit den selben Koordinaten, wie der Punkt. Dieser beschreibt sozusagen die "Verschiebung", die von Ursprung des Koordinatensystems zum Punkt geht.

z.B.
Punkt P(5|7|8)
Ortsvektor p=(5|7|8)

d.h. man muss von Ursprung des Koordinatensystems 5 Einheiten in x-Richtung, 7 in y-Richtung und 8 in z-Richtung gehen um P zu erreichen.

Subtraktion:
Wenn man vom Ortsvektor von A den Ortsvektor von B subtrahiert, erhält man einen Vektor, der die Verschiebung von B nach A beschreibt. (Anders gesagt der resultierende Vektor zeigt wenn man sein Ende an B "anhängt" genau auf A (als Pfeile dargestellt))

Addition:
Wenn man zwei Vektoren addiert, "hängt" man sozusagen beide Pfeile aneinander, indem man den Anfang des ersten Vektors an das Ende des zweiten Vektors anhängt. Der neue Vektor zeigt vom Anfang des ersten Vektors zum Ende des angehängten zweiten Vektors.

Länge von Vektoren:
Die Länge dieses Vektors ergibt sich aus dem Satz des Pythagoras und wird berechnet mit:

v = (a | b | c)
|v| = wurzel(a² + b² + c²)

bei p z.b.: |p| = wurzel(5² + 7² + 8²) ~= 11,75

Einheitsvektoren:
Wenn man einen Vektor auf eine Länge von 1 bringt, erhält man einen Einheitsvektor. Das funktioniert,
indem man jede Koordinate eines Vektors durch dessen Länge teilt.

Skalarprodukt:
Es gilt:
A * B = cos(phi)*|A|*|B|

Dabei ist phi der Winkel zwischen Vektor A und B. (von einem gemeinsamen Ausgangspunkt dargestellt als Pfeile) Wenn man für A und B Einheitsvektoren benutzt, ist |A|*|B| = 1 und dann kann man den Winkel ganz einfach berechnen, indem man den Inverskosinus des Skalarproduktes beider Vektoren berechnet.

Man kann auch herausfinden, wie weit sich der eine Vektor in Richtung des anderen ausstreckt. Dazu macht man lediglich aus einem Vektor einen Einheitsvektor. Nämlich den, der die Richtung beschreibt, von der wir wissen wollen, wie weit sich der andere Vektor in diese ausdehnt. (:D)

Vektorprodukt:
Zwei Vektoren zusammen können eine Ebene festlegen. Beispiel: in einem normalen kartesischen Koordinatensystem bestimmen x- und y-Achse eine Ebene, nämlich die Zeichenebene.

Das Vektorprodukt liefert einen neuen Vektor, der genau senkrecht zu dieser Ebene steht. In meinem Beispiel oben würde dieser Vektor in die Zeichenebene, oder aus ihr heraus "schauen". Das hängt von der Reihenfolge der Vektoren ab. (gibts ne Handregel zu)

---
Eigentlich wollte ich nur ein paar Sachen anmerken. Ist aber etwas mehr geworden :D Wenn etwas nicht stimmt, möge man mich gerne korrigieren. Ich bin auch nur Schüler und hab die Hälfte davon selber erarbeitet.

cya DerTod

druggedApE
2004-09-16, 16:06:41
thx! das hat mir schonmal sehr geholfen :) was vektoren ungefähr sind wusste ich schon, aber wozu man welche operation gut ist wusste ich noch nicht. und was genau sind matrizen? :)

grüße
steve

mrdigital
2004-09-16, 16:33:40
Mit Matritzen kann man weitere Oprationen durchführen. Man kann mit einer Matritze Vektoren rotieren, oder ein Bezugssystemwechsel durchführen. Man kann auch mehrere Operationen zu einer einzelnen Matritze zusammenfassen und dann diese Matritze einmal anwenden, das führt dann alle Operationen gleichzeitig durch.
Formal beschreibt eine Matritze eine (lineare) Abbildung. Ich hab aber im Moment nicht genügend Zet das wirklich ausführlich zu erklären, später vielleicht.
Ach so Matritzen sehen aus wie mehrere aneinander gepappte Vektoren:
/ 1 4 7 \
| 2 5 8 |
\ 3 6 9 /
und mit diesen kann man nun sich eine Multiplikation mit einem Vektor definieren (das Ergebniss ist wieder ein Vektor).

Coda
2004-09-17, 23:31:15
Im Prinzip ist ein Vektor auch nur eine eindimensionale Matrix...

mrdigital
2004-09-18, 11:28:58
nein ;) was ist eine "eindimensionale" Matrix - ein Skalar? Ein Vektor ist immer was mehrdimensionales. Du meintest sicher, dass ein Vektor eine n X 1 Matritze darstellt, also eine Matritze mit nur einer Spalte (aber die Spalte hat ja viele Zeilen, d.h. mehrdimensional ;) ).
So genug geklugscheissert =)