Autor Beitrag
doubleq
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 06.05.06 22:17 
Hallo,

ich müsste für eine Aufgabe einen Vektor in eine Ebene projezieren um dann einen Winkel zwischen diesem Vektor und einem Anderen in eben dieser Ebene zu bestimmen. Das Ganze sollte wenn möglich auch noch von der Performance ziemlich gut sein - wie könnte ich das am Besten umsetzen?

Viele Grüße DoubleQ
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: So 07.05.06 16:34 
Da gibt es "verschiedene" Methoden, je nachdem in welcher Form die Ebene gegeben ist. Koordinatenform, Normalenform oder Hessische Normalenform (dürfte wohl das schnellste sein).

Prinzip:

myvector+ k * ebenennormale muss für ein k element der Ebene sein. Dies zu überprüfen da treten nun Unterschiede auf: Koordinatenform (Gleichungssystem lösen). Normalenform (Skalarprodukt = 0 meiner Meinung nach schneller). Dann ist der projizierte Vektor myprojzivektor:= myvector + k * ebenennormale.

Winkel pi/2-arccos((myvektor/|myvektor|)*(Ebenennormale/|Ebenennormale|));
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 08.05.06 11:38 
Musst du projizieren und Winkel berechnen oder nur das letztere? Man kann auch den Winkel berechnen ohne den Zwischenschritt der Projektion.

Projektion:
Abgesehen von der Verschiebung der Ebene projiziert man den Vektor w folgendermassen auf die Ebene gegeben durch Normale n:
 P(w) = w-<n,w>/<n,n>*n
Oder als Projektionsmatrix M:
 M = 1-(n*n^T)/<n,n>
Wobei <a,b> das Skalarprodukt von a und b ist.
Dann ist der projizierte Vektor w' = P(w) = M*w

Winkel:
Für den Winkel schaust du dir einfach das Skalarprodukt zwischen Ebenennormale und gegebenen Vektor an.