Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 00:22

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 2 Vektoren und Rotation
BeitragVerfasst: Mo Jan 06, 2003 20:48 
Offline
DGL Member
Benutzeravatar

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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 07, 2003 18:44 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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;

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 08, 2003 01:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
da deine Vektoren bereits normiert sind (die Länge 1 haben) kannst du die Formel noch vereinfachen:

Code:
  1.  
  2.  
  3. // Winkel zwischen zwei NORMIERTEN Vektoren v1 und v2
  4.  
  5. alpha := ArcCos(v1.x*v2.x + v1.y*v2.y + v1.z*v2.z);
  6.  
  7.  


-lith

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 08, 2003 13:06 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Stimmt. Ich wollte allerdings allgemeingültige Routinen bereitstellen. Das Kreuzprodukt kann man übrigens auch noch optimieren:

// Kreuzprodukt berechnen
function VectorCross(v1, v2 : TVec): TVec;

begin
Result.x := V1.y*V2.z - V1.z*V2.y;
Result.y := V1.z*V2.x - V1.x*V2.z;
Result.z := V1.x*V2.y - V1.y*V2.x;
end;

spart eine völlig unnötige Kopieraktion von Temp in die Zielvariable.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 08, 2003 13:11 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]