Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Vektor auf Ebene projezieren (3D)
doubleq - Sa 06.05.06 22:17
Titel: Vektor auf Ebene projezieren (3D)
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 - 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 - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!