WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Drehwinkel für Rotationsmatrix bestimmen

 

MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.08.2012, 08:56     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
Man muss eine mögliche Lösung vorher skizzieren, bevor man irgendeinen Code verwendet.

Möglichkeiten, einen Vektor in eine Ebene zu rotieren:

1. Projektion des Vektors in die Ebene
2. Irgendeinen der beiden Richtungsvektoren der Ebene nehmen
3. Irgendeine Linearkombination der beiden Richtungsvektoren der Ebene nehmen

Was man hier aber keineswegs braucht, sind irgendwelche Drehmatrizen.
Private Nachricht senden Benutzer-Profile anzeigen


D-RSPhoenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2012, 12:33     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
MaFam hat Folgendes geschrieben:
Man muss eine mögliche Lösung vorher skizzieren, bevor man irgendeinen Code verwendet.

Möglichkeiten, einen Vektor in eine Ebene zu rotieren:

1. Projektion des Vektors in die Ebene
2. Irgendeinen der beiden Richtungsvektoren der Ebene nehmen
3. Irgendeine Linearkombination der beiden Richtungsvektoren der Ebene nehmen

Was man hier aber keineswegs braucht, sind irgendwelche Drehmatrizen.


schön bringt mir leider nur nichts
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.08.2012, 12:34     Titel:
  Antworten mit Zitat      
Warum nicht?
Private Nachricht senden Benutzer-Profile anzeigen
 
D-RSPhoenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2012, 08:45     Titel:
  Antworten mit Zitat      
D-RSPhoenix hat Folgendes geschrieben:
MaFam hat Folgendes geschrieben:
Man muss eine mögliche Lösung vorher skizzieren, bevor man irgendeinen Code verwendet.

Möglichkeiten, einen Vektor in eine Ebene zu rotieren:

1. Projektion des Vektors in die Ebene
2. Irgendeinen der beiden Richtungsvektoren der Ebene nehmen
3. Irgendeine Linearkombination der beiden Richtungsvektoren der Ebene nehmen

Was man hier aber keineswegs braucht, sind irgendwelche Drehmatrizen.


hm das Problem, das ich habe ist, dass ich eben eine solche Matrix brauche, denn was ich eigentlich tun will ist die Drehung eines Quaders im Raum festzustellen um ihn dann mit der ihn umgebenden Puntkwolke so zu drehen, dass der Quader danach achsparallel ist.
Achsparallel bedeute, dass alle Kanten parallel zu einer Koordinatenachse sind.
Den Quader habe ich anhand der 6 Normalenvektoren seiner Ebenen gegeben.

Also wenn du so willst habe ich quasi ein quaderfestes Koordinatensystem mit dem Ursprung in einer Quaderecke und 3 Vektoren die senkrecht aufeinander stehen. Für dieses Koordinatensystem brauche ich jetzt die Drehwinkel um es mit einer Rotationsmatrix in die Ausrichtung des erdfesten Koordinatensystem zu drehen. (keine Verschiebung des Ursprungs des quaderfesten Koordinatensystems)
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 06.08.2012, 09:11     Titel:
  Antworten mit Zitat      
So?

Rotation.png
 Beschreibung:

Download
 Dateiname:  Rotation.png
 Dateigröße:  18.21 KB
 Heruntergeladen:  1242 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
D-RSPhoenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2012, 14:47     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
So?


ah cool
ja genau so und halt alle punkte um den quader noch mit rotieren

hast mir da eine idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 06.08.2012, 14:57     Titel:
  Antworten mit Zitat      
Dazu kannst du auf die Beiträge von Goofy9020 zurückgreifen... Dann ist der Sachverhalt auch ein anderer und es geht nicht primär um Parallelität!
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 07.08.2012, 10:34     Titel:
  Antworten mit Zitat      
Ich habe mir jetzt noch überlegt, dass es eine simple Basistransformation ist. Schaue dir erstmal den Anhang an...

Die drei Normalvektoren des Quaders (diese sollten normiert sein) beschreiben ein transformiertes, rotiertes Koordinatensystem. Die Problematik hier ist scheinbar schlicht, auf ein Standardkoordinatensystem abzubilden. Dazu nimmst die drei normierten Normalenvektoren des Quaders und trägst diese spaltenweise in eine Matrix ein. Dann bildest du die Inverse dieser Matrix. Die Invertierbarkeit ist stets sichergestellt, da es sich um eine Basis handelt.

Diese inverse Matrix kannst du auf die Normalenvektoren und die Punktwolke anwenden und erhältst das von dir Gewünschte.

Rotation.png
 Beschreibung:

Download
 Dateiname:  Rotation.png
 Dateigröße:  19.88 KB
 Heruntergeladen:  1206 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
D-RSPhoenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2012, 14:16     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
Ich habe mir jetzt noch überlegt, dass es eine simple Basistransformation ist. Schaue dir erstmal den Anhang an...

Die drei Normalvektoren des Quaders (diese sollten normiert sein) beschreiben ein transformiertes, rotiertes Koordinatensystem. Die Problematik hier ist scheinbar schlicht, auf ein Standardkoordinatensystem abzubilden. Dazu nimmst die drei normierten Normalenvektoren des Quaders und trägst diese spaltenweise in eine Matrix ein. Dann bildest du die Inverse dieser Matrix. Die Invertierbarkeit ist stets sichergestellt, da es sich um eine Basis handelt.

Diese inverse Matrix kannst du auf die Normalenvektoren und die Punktwolke anwenden und erhältst das von dir Gewünschte.


Oh cool das ist genau das, was ich für den Quader machen will.

Versteh ich das richtig, dass ich das, dann so machen muss?

Data'=inv([N1,N2,N3])*Data

/ N1 ⊥ N2 ⊥N3 (gegeben)

Dafür brauche ich aber dann alle 3 senkrecht aufeinander stehenden Ebenen-Normalen oder? (Das ist im allgemeinen kein Problem, da ich die beim Quader habe)

Mein Problem ist, dass ich das gleiche auch für einen Kegel raus bekommen will.

Ich hab dir ein Bild angehängt. Leider gab es in PowerPoint kein Kegel deswegen habe ich ersatzweise einen Zylinder genommen. Ich hab allerdings einen Kegel, dh mit Spitze oben.

Von dem Kegel habe ich nur die Spitze und die Ebenen-Normale, von der Ebene auf der er steht (die kann leider beliebig im Raum liegen).
Den Kegel würde ich jetzt gerne genauso wie den Quader so hindrehen, dass die Kegelachse parallel oder gleich der Z-Achse ist.

Das muss doch auch irgendwie gehen.

Körper-Trafo.JPG
 Beschreibung:

Download
 Dateiname:  Körper-Trafo.JPG
 Dateigröße:  19.08 KB
 Heruntergeladen:  1154 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 08.08.2012, 14:37     Titel:
  Antworten mit Zitat      
D-RSPhoenix hat Folgendes geschrieben:

Oh cool das ist genau das, was ich für den Quader machen will.

Versteh ich das richtig, dass ich das, dann so machen muss?

Data'=inv([N1,N2,N3])*Data

/ N1 ⊥ N2 ⊥N3 (gegeben)

Dafür brauche ich aber dann alle 3 senkrecht aufeinander stehenden Ebenen-Normalen oder? (Das ist im allgemeinen kein Problem, da ich die beim Quader habe)


Bis hierhin ist alles korrekt soweit.

D-RSPhoenix hat Folgendes geschrieben:

Mein Problem ist, dass ich das gleiche auch für einen Kegel raus bekommen will.

Ich hab dir ein Bild angehängt. Leider gab es in PowerPoint kein Kegel deswegen habe ich ersatzweise einen Zylinder genommen. Ich hab allerdings einen Kegel, dh mit Spitze oben.

Von dem Kegel habe ich nur die Spitze und die Ebenen-Normale, von der Ebene auf der er steht (die kann leider beliebig im Raum liegen).
Den Kegel würde ich jetzt gerne genauso wie den Quader so hindrehen, dass die Kegelachse parallel oder gleich der Z-Achse ist.

Das muss doch auch irgendwie gehen.


Wenn du nur die Normale der Ebene hast, dann muss man, um eine Basis zu erhalten, zwei weitere Basisvektoren finden. Da aber ein Kegel, ebenso ein Zylinder, rotationssymmetrisch ist, würde ich zu einer Orthnormalbasis ergänzen mit dem Gram-Schmidtschen Orthogonalisierungsverfahren und dem Normalenvektor der Ebene als Startvektor für dieses Verfahren. Das klingt dramatisch, ist aber recht simpel. Smile

Siehe hier: http://de.wikipedia.org/wiki/Gram-S.....hogonalisierungsverfahren
Private Nachricht senden Benutzer-Profile anzeigen
 
D-RSPhoenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2012, 15:25     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:


Wenn du nur die Normale der Ebene hast, dann muss man, um eine Basis zu erhalten, zwei weitere Basisvektoren finden. Da aber ein Kegel, ebenso ein Zylinder, rotationssymmetrisch ist, würde ich zu einer Orthnormalbasis ergänzen mit dem Gram-Schmidtschen Orthogonalisierungsverfahren und dem Normalenvektor der Ebene als Startvektor für dieses Verfahren. Das klingt dramatisch, ist aber recht simpel. Smile

Siehe hier: http://de.wikipedia.org/wiki/Gram-S.....hogonalisierungsverfahren


Öhm ok das klingt wirklich erstmal dramatisch ;P
Ich guck mal aber ich denk das bekomme ich hin danke Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 08.08.2012, 16:03     Titel:
  Antworten mit Zitat      
Das lässt sich aber auch mit Boardmitteln von Matlab lösen.

Code:

% Normalenvektor der Ebene, parallel zur Kegelhöhenlinie
c0=[1 2 1]';
% kanonische Basisergänzung
c1=[0 1 0]';
c2=[0 0 1]';

% Basis als Matrix dargestellt
A=[c0, c1, c2];

% Berechnung der QR-Zerlegung von A
[Q,R]=qr(A);
% Sicherstellen, dass c0 in der neuen Basis dieselbe Orientierung hat
Q=-1*Q

% Q ist nun die Orthonormalbasis und Q' (Transponierte) die Inverse. Sodann gilt Data'=Q'*Data, wobei Data jede bel. Punktmenge sein kann.
 
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 12.08.2012, 18:41     Titel:
  Antworten mit Zitat      
Hier mal ein Beispiel für die Rotation einer Punktwolke...

Code:

% Normalenvektor des blauen Zylinders
c0=[1 0 1]';
% kanonische Basisergänzung
c1=[0 1 0]';
c2=[0 0 1]';

% Basis als Matrix dargestellt
A=[c0, c1, c2];

% Berechnung der QR-Zerlegung von A
[Q,R]=qr(A);

% Zylinder in Parameterform
% x = cos s;
% y = sin s;
% z = t;

% Anzahl der Punkte
n=300;

% Parameter setzen
t=2*pi*rand(n,1);
s=2*pi*rand(n,1);

% Punkte berechnen
x = cos(s);
y = sin(s);
z = t;

% Transformation
% roter Zylinder
pw=[x,y,z];
% blauer Zylinder
pw_t=Q*pw';

% zeichnen
hold on
axis equal
plot3(x,y,z,'r.')
plot3(pw_t(1,:),pw_t(2,:),pw_t(3,:),'b.')
hold off
 


Schau' dir das mal mit "Rotate 3D" an. Es kann nun die inverse von Q auf die blaue Punktwolke angewandt werden und man erhielte die rote.

pw_trans.png
 Beschreibung:

Download
 Dateiname:  pw_trans.png
 Dateigröße:  15.65 KB
 Heruntergeladen:  1114 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
D-RSPhoenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2012, 08:07     Titel:
  Antworten mit Zitat      
Ich habe es bei mir mal ausprobiert und läuft recht gut. Lustigerweise wird der Kegel bei deiner Lösung in die XY-Ebene gelegt also mit Rotationsachse vom Kegel parallel zur Y-Achse Koordinatensystem aber da das immer so ist hab ich ihn einfach um weitere 90° gedreht dann passt alles Wink

Code:

    %Normalenvektor der Ebene, parallel zur Kegelhöhenlinie
    c0=RANSAC_model;
    %kanonische Basisergänzung
    c1=[0 1 0]';
    c2=[0 0 1]';

    %Basis als Matrix dargestellt
    A=[c0, c1, c2];

    %Berechnung der QR-Zerlegung von A
    [Q,R]=qr(A);
    %Sicherstellen, dass c0 in der neuen Basis dieselbe Orientierung hat
    Rotation=-1*Q';

    %Q ist nun die Orthonormalbasis und Q' (Transponierte) die Inverse. Sodann gilt DataRot=Rot*Data, wobei Data jede bel. Punktmenge sein kann.
    Data=Rotation*Data;
    Data=Rot(Data,0,-90,0);

    %Überprüfung ob dir Rücktrafo das Original ergibt
    ata=Rot(Data,0,90,0);
    ata=Rotation'*ata;
   
   
plot3(Data(1, :), Data(2, :), Data(3, :))
plot3(ata(1, :), ata(2, :), ata(3, :),'m*')
 


Kegel-Trafo.JPG
 Beschreibung:

Download
 Dateiname:  Kegel-Trafo.JPG
 Dateigröße:  123.03 KB
 Heruntergeladen:  1083 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 13.08.2012, 08:30     Titel:
  Antworten mit Zitat      
Prima. Zu dem kleinen Fehler: Lass einfach die Multiplikation mit -1 bei Rotation=-1*Q'; weg. Das ist im allgemeinen falsch....
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.