Registriert: Sa Okt 26, 2002 17:14 Beiträge: 188 Wohnort: Hannover/Lüneburg
Hallo!
Stehe gerade vor einem kleinen Vektorproblem.
Ich habe 2 normalisierte Vektoren. Ich müsste jetzt "nur" noch wissen, um welche Winkel ich den einen Vektor jeweils um die 3 Achsen drehen müsste, damit er den 2. Vektor ergibt.
_________________ Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
1) Kreuzprodukt ergibt den Normalvektor der aufgespannten Ebene
2) der Cosinus des Winkels ist leicht berechnet, mit diesem Winkel rotierst du den einen Vektor um den Normalvektor um den anderen Vektor zu bekommen.
Bevor ich jetzt lange die Mathematik erkläre, poste ich lieber die benötigten Routinen:
// Kreuzprodukt berechnen
function VectorCross(v1, v2 : TVec): TVec;
var
Temp : TVec;
begin
Temp.x := V1.y*V2.z - V1.z*V2.y;
Temp.y := V1.z*V2.x - V1.x*V2.z;
Temp.z := V1.x*V2.y - V1.y*V2.x;
Result := Temp;
end;
// Winkel zwischen zwei Vektoren
function VectorAngle(v1, v2 : TVec) : float;
var
v, w : float;
begin
v := v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
w := (sqr(v1.x)+sqr(v1.y)+sqr(v1.z)) * (sqr(v2.x)+sqr(v2.y)+sqr(v2.z));
result := ArcCos(v / sqrt(w));
end;
He, jetzt seh' ich erst, dass man im Editor ja ganz tolle Codeboxen und andere Objekte einfügen kann. Das ist ja wirklich komfortabel - ein Lob an den Programmierer.
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.