Standardskalarprodukt: Unterschied zwischen den Versionen
K (hat „Standard Skalarprodukt“ nach „Standardskalarprodukt“ verschoben: Das ist ein Wort, nicht zwei.) |
|||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | == | + | == Standardskalarprodukt == |
=== Übersicht === | === Übersicht === | ||
− | Das euklidische Standardskalarprodukt oder Punktprodukt dient in der 3D Grafik meist zur Berechnung von Winkeln, kann jedoch sehr häufig auch eine Reihe anderer Zwecke erfüllen. Die Einsatzorte sind vielfältig, kann man doch damit Reflexionen, Bumpmapping, Collision Detection u.v.m. realisieren. | + | Das euklidische Standardskalarprodukt oder Punktprodukt dient in der 3D-Grafik meist zur Berechnung von Winkeln, kann jedoch sehr häufig auch eine Reihe anderer Zwecke erfüllen. Die Einsatzorte sind vielfältig, kann man doch damit Reflexionen, Bumpmapping, Collision Detection u.v.m. realisieren. |
=== Definition === | === Definition === | ||
Zeile 10: | Zeile 10: | ||
Haben a, b also die Länge 1, so berechnet das Skalarprodukt ‹a,b› den Kosinus des Zwischenwinkels. Stehen beliebige Vektoren a, b senkrecht aufeinander, so ist der Winkel Pi/2, der Cosinus also 0 und damit das Skalarprodukt 0, wenn die beiden Vektoren senkrecht aufeinander stehen. (Beachte: Der Nullvektor ist senkrecht zu allen anderen Vektoren definiert, sogar zu sich selbst!) | Haben a, b also die Länge 1, so berechnet das Skalarprodukt ‹a,b› den Kosinus des Zwischenwinkels. Stehen beliebige Vektoren a, b senkrecht aufeinander, so ist der Winkel Pi/2, der Cosinus also 0 und damit das Skalarprodukt 0, wenn die beiden Vektoren senkrecht aufeinander stehen. (Beachte: Der Nullvektor ist senkrecht zu allen anderen Vektoren definiert, sogar zu sich selbst!) | ||
− | Es lässt sich zeigen, dass man das | + | Es lässt sich zeigen, dass man das Standardskalarprodukt sehr leicht berechnen kann. Seien a=(a1;a2;a3), b=(b1;b2;b3), dann gilt: |
‹a,b› = a1*b1 + a2*b2 + a3*b3 | ‹a,b› = a1*b1 + a2*b2 + a3*b3 | ||
Aktuelle Version vom 22. Januar 2011, 18:58 Uhr
Inhaltsverzeichnis
Standardskalarprodukt
Übersicht
Das euklidische Standardskalarprodukt oder Punktprodukt dient in der 3D-Grafik meist zur Berechnung von Winkeln, kann jedoch sehr häufig auch eine Reihe anderer Zwecke erfüllen. Die Einsatzorte sind vielfältig, kann man doch damit Reflexionen, Bumpmapping, Collision Detection u.v.m. realisieren.
Definition
Zwei Vektoren a, b wird durch eine eindeutige Zahl ‹a,b› das Skalarprodukt zugeordnet:
‹a,b› := ||a||*||b||*cos(φ) 0≤φ≤π
Haben a, b also die Länge 1, so berechnet das Skalarprodukt ‹a,b› den Kosinus des Zwischenwinkels. Stehen beliebige Vektoren a, b senkrecht aufeinander, so ist der Winkel Pi/2, der Cosinus also 0 und damit das Skalarprodukt 0, wenn die beiden Vektoren senkrecht aufeinander stehen. (Beachte: Der Nullvektor ist senkrecht zu allen anderen Vektoren definiert, sogar zu sich selbst!)
Es lässt sich zeigen, dass man das Standardskalarprodukt sehr leicht berechnen kann. Seien a=(a1;a2;a3), b=(b1;b2;b3), dann gilt:
‹a,b› = a1*b1 + a2*b2 + a3*b3
Rechenregeln
- ‹a,a› entspricht der Länge von a im Quadrat, denn ‹a,a› = ||a||*||a||*Cos(0) = ||a||2
- Linearität in beiden Argumenten:
‹a + b, c› = ‹a,c› + ‹b,c› ‹a, b + c› = ‹a,b› + ‹a,c› ‹λ* a, b› = λ* ‹a,b› (λ reel) ‹a, λ* b› = λ* ‹a,b›
Es ist daher naheliegend, das Produkt mit einem Punkt zu schreiben und die gewohnten Rechenregeln anzuwenden. Deshalb schreibt man häufig auch: a•b := ‹a,b›. Die Regeln werden dann zu:
(a + b)•c = a•c + b•c a•(b + c) = a•b + a•c
- Kommutativität: ‹a,b›=‹b,a›
Beispiel
Kugel - Ray - Intersection
Gegeben sei eine Kugel um den Mittelpunkt p mit Radius r. Die Bedingung für Punkte x auf der Oberfläche der Kugel ist dann gegeben durch:
||x-p||= r,
d.h. der Abstand von x zu p entspricht dem Radius. Andererseits sei ein Strahl mit Anfang o und Richtung d gegeben. Für Punkte x auf dem Strahl gilt also:
x = o + t*d (t reel, größer gleich 0)
Um die Schnittpunkte von Kugel und Strahl zu berechnen, wollen wir den Strahl in die Kugel einsetzen:
||x - p|| = r ‹=› ||x - p||2 = r2 (Quadrieren) ‹=› ||o + t*d - p||2 - r2 = 0 ‹=› ||(o-p) + t*d||2 - r2 = 0 (Definiere zur kurzen Schreibweise: e := o-p ) ‹=› ‹e + t*d, e + t*d› - r2 = 0 (||.||2 als Skalarprodukt) ‹=› ‹e,e› + 2*‹e,t*d› + ‹t*d, t*d› - r2 = 0 ‹=› ||e||2 + 2*t*‹e,d› + ||t*d||2 - r2 = 0 ‹=› |t|2*||d||2 + 2*t*‹e,d› + ||e||2 - r2 = 0
Man kann ||d||2=‹d,d›, ‹e,d› und ||e||2 - r2 leicht berechnen und erhät so eine quadratische Gleichung für t, die man mit der Mitternachtsformel schnell löst (Anhand der "Determinante" kann man prüfen, ob überhaupt ein Schnitt vorliegt). Die höchstens 2 Lösungen von t kann man dann in den Strahl einsetzen und bekommt die Schnittpunkte.
Siehe auch