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

Problem mit Transformation

 

Logi87
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 06.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2012, 16:44     Titel: Problem mit Transformation
  Antworten mit Zitat      
Hallo,

also ich habe folgendes Problem.

Ich habe eine Punktwolke in einem 3-dim kartesischen System.
Durch die Kippung des Aufnahmegerätes steht diese schräg im Raum.

Ich hänge das mal als Bild an, damit man sich das besser vorstellen kann.
[Anhang 1]

Im Bild zu sehen sind die Ebenen:
Orange - Ebene YZ
Grün - Ebene XY
Lila - Ebene XZ

und als Annährung der Fassade - dunkles Lila

ich möchte nun eine Transformation durchführen um die Punktwolke so zu drehen, so dass die z-Achse auch die wirkliche Höhe angibt.

Mein Problem das ich jetzt habe ist in die Punktwolke Achsen rein zu legen um so die Rotationswinkel zu bestimmen.

Da ich unterm Strich ja die Fassadenebene in die YZ-Ebene drehen möchte, habe ich mir gedacht da ich von beiden Ebenen die Normalenvektoren habe, könnte ich die Winkel über diese berechnen.

Geht das? Hat jemand eine andere Idee dies zu berechnen, da die Fassadenebene ja auch nur eine Approximation ist.

Hier mal mein Code bisher.
n1 und n2 sind die Normalenvektoren der Ebene.

Code:
% Alpha - x; Beta - y; Gamma - z
[Alpha Beta Gamma] = Schnitt3(n1, n2);


----------
function [ Alpha Beta Gamma] = Schnitt3 ( P1, P2 );
% Berechnung der 3 dimmensionalen Richtungswinkel
% Alpha ist Winkel zwischen den x-Richtungen
% Beta ist Winkel zwischen den y-Richtungen
% Gamme ist Winkel zwischen den z-Richtungen

P1;
P2;

x1 = P1(1,1);   y1 = P1(1,2);   z1 = P1(1,3);
x2 = P2(1,1);   y2 = P2(1,2);   z2 = P2(1,3);


x3 = x2 - x1;   y3 = y2 - y1;   z3 = z2 - z1;


Betrag = sqrt( (x3)^2 + (y3)^2 + (z3)^2 );

Alpha   = acos(x3 / Betrag);
Beta    = acos(y3 / Betrag);
Gamma   = acos(z3 / Betrag);

end
------------------

C = Rotation(1,Alpha) * Rotation(2,Beta) * Rotation(3,Gamma);



Ich habe mir nun um die Performance zu steigern beim ausprobieren ein kleines Stück der Fassade ausgeschnitten.

Wenn ich das jetzt so durchlaufen lasse, habe ich aber das Problem das es total im Raum verdreht ist. (Bild 2)
Als Anhang 3 hänge ich nochmal den Orginalzustand an.


So ich hoffte ich konnte verständlich mein Problem darlegen.

3.jpg
 Beschreibung:

Download
 Dateiname:  3.jpg
 Dateigröße:  93.48 KB
 Heruntergeladen:  501 mal
2.jpg
 Beschreibung:

Download
 Dateiname:  2.jpg
 Dateigröße:  99.17 KB
 Heruntergeladen:  457 mal
1.jpg
 Beschreibung:

Download
 Dateiname:  1.jpg
 Dateigröße:  31.15 KB
 Heruntergeladen:  520 mal
Private Nachricht senden Benutzer-Profile anzeigen


Tusor
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 02.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2012, 08:50     Titel:
  Antworten mit Zitat      
Hallo,
rein über die Normalenvektoren kann das nicht funktionieren, da das nicht eindeutig ist. Ich kann die Fassadenebene so drehen, dass die beiden Normalenvektoren deckungsgleich sind. Aber dann könnte ich die Fassade ja immer noch um diesen Normalenvektor drehen. Das heißt du brauchst noch eine zusätzliche Bedingung (z.B. eine Definition was an der Fassade oben ist).
Bei solchen Drehungen im Raum kommt es auch sehr auf die Reihenfolge der Elementardrehungen an. Dazu fallen mir die Stichworte Euler- bzw. Kardanwinkel ein. Vielleicht kommst du damit ja schon ein Stück weiter.
Ist deine Fassadenfläche wirklich in allen Raumrichtungen verdreht oder kann man annehmen, dass man nur um zwei Achsen drehen muss?
Viele Grüße
Tusor
Private Nachricht senden Benutzer-Profile anzeigen
 
Logi87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 06.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2012, 10:18     Titel:
  Antworten mit Zitat      
Also die Punktwolke ist wirklich um alle 3 Achsen verdreht.

Das mit den Winkeln hatte ich schon, aber halt wie man auf die
kommt ist mein Problem.

Also ich habe zu allen gegebenen Ebenen den Urspung und den
Normalenvektor. Ich könnte ja gegebenenfalls eine Polylinie als fiktive Senkrechte auf die Ebene legen, die wäre dann aber auch nicht genau,
da ich diese nur manuel einklicken kann und durch die Drehung entstehen
da Unsicherheiten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Tusor
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 71
Anmeldedatum: 02.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2012, 10:50     Titel:
  Antworten mit Zitat      
Man könnte sich da ein zweistufiges Verfahren vorstellen: Man korrigiert erst einmal zwei Winkel (horizontale Richtung und Neigung). Dann definiert man in der Ebene, das was senkrecht sein soll und dreht das noch nach oben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 2025 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.