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

Verdrehung eine Punkten in Abhängigkeit eines Winkels

 

Markus1995
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2016, 22:00     Titel: Verdrehung eine Punkten in Abhängigkeit eines Winkels
  Antworten mit Zitat      
Hallo Leute

Angenommen ich habe einen Punkt P1(0.42|87.62I-10) und möchte diesen an den Punkt P2(0.699|87.65I-10) verschieben.
Allerdings in Abhängigkeit von einem Winkel α.

Den Winkel α ermittle ich mit der Formel :α=cos −1(u⃗ ∘v⃗ ∣∣u⃗ ∣∣⋅∣∣v⃗ ∣∣)


Nachdem ich α ermittelt habe setze ich es in diese Formel ein

x1=0.42
y1=87.62
z1=−10


x2=x1⋅cos(α)−y1⋅sin(α)
y2=y1⋅cos(α)+x1⋅sin(α)
z2=z1
Jedoch bekomme ich für x2und y2 nicht die Koordinaten vom P2 raus. Voran könnte es liegen ?

Ich habe einen Denkfehler aber wo weiß ich nicht ganz genau, bedanke mich jetzt schon für euer Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.09.2016, 22:04     Titel:
  Antworten mit Zitat      
Hallo,

poste doch bitte deinen Code.

Was bedeutet das I in den Punktkoordinaten?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2016, 19:52     Titel:
  Antworten mit Zitat      
Hallo Harald,

Code:

A=(0.42;87.62;-10)
B=(0.699;87.65;-10)

alpha = atan2(norm(cross(a,b)),dot(a,b));  %hier ermittle ich den Winkel zwischen             %den beiden Vektoren

%Nach dem ich den Winkel zwischen den beiden Vektoren ermittelt habe, möchte ich nun %den Vektor a um den Winkel alpha verdrehen so das diese auf dem Vektor b steht.

ax =((a(1,1)*cos(alpha))-((a(2,1)*sin(alpha));
ay =((a(1,1)*sin(alpha))+((a(2,1)cos(alpha));
az = a(3,1);



 


Nun müssten die Koordinaten vom (ax;ay;az)==Vektor B sein, aber leider ist es nicht so, irgendwo mache ich einen Denkfehler jedoch weiß ich nicht ganz genau wo ich diesen mache.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.09.2016, 20:11     Titel:
  Antworten mit Zitat      
Hallo,

der Code hat etliche Syntaxfehler: ( ) statt [ ], Großbuchstaben statt Kleinbuchstaben für die Variablen, atan2 statt acos, und dann noch ein fehlendes * sowie falsch gesetzte Klammern.

Nun zur Anwendung: du hast zwei Vektoren unterschiedlichen Betrages. Da ist es unmöglich, einen Punkt aus dem anderen durch Drehung um den Ursprung zu erhalten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2016, 20:18     Titel:
  Antworten mit Zitat      
a=[0.42;87.62;-10]
b=[0.699;87.65;-10]

alpha= acos( dot(a,b) / (norm(a) * norm(b)) ); %hier ermittle ich den Winkel zwischen %den beiden Vektoren

%Nach dem ich den Winkel zwischen den beiden Vektoren ermittelt habe, möchte ich nun %den Vektor a um den Winkel alpha verdrehen so das diese auf dem Vektor b steht.

ax =(a(1,1)*cos(alpha))-(a(2,1)*sin(alpha));
ay =(a(1,1)*sin(alpha))+(a(2,1)*cos(alpha));
az = a(3,1);


Hier jetzt verbessert.


Gibt es keine andere Möglichkeit ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.09.2016, 21:45     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit wofür?

Wenn du b aus a durch Drehung erhalten willst, dann um eine andere Achse.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2016, 22:11     Titel:
  Antworten mit Zitat      
Das mit der Drehung war ja nur eine Idee von mir, ich kann es ja auch mit einer Verschiebung versuchen.
Gibt es auch einen anderen Möglichkeit, außer Drehung und Verschiebung ?.
Was meinst du mit einer anderen Drehachse ?


Gruß Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.09.2016, 22:19     Titel:
  Antworten mit Zitat      
Hallo,

was genau möchtest du erreichen? Natürlich könntest du um b-a verschieben, aber das wird ja kaum Sinn der Sache sein?

Zitat:
Gibt es auch einen anderen Möglichkeit, außer Drehung und Verschiebung ?.

Vermutlich. Du hast aber noch nicht beantwortet, wofür.

Zitat:
Was meinst du mit einer anderen Drehachse ?

Die verwendete Abbildung dreht um die z-Achse. Drehungen können aber auch über jede beliebige andere Achse im Raum erfolgen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2016, 22:28     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ich habe in einem Raum zwei Punktwolken die fast aufeinander stehen, jetzt möchte ich eines der Punktwolken durch Drehung oder auch andere Möglichkeit an das andere heranbringen, so das diese sich berühren. Gegeben sind Nur die x,y und z Koordinaten von den Punktwolken. Die Z-Koordinanten von beiden Punktwolken sind identisch.
Also kann ich nur die x und y Achse betrachten.
Kannst dir auch zwei Teppiche vorstellen die fast aufeinander liegen und durch eine beliebigen Verdrehung möchte ich das die Teppiche aufeinander liegen.



Gruß Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.09.2016, 22:54     Titel:
  Antworten mit Zitat      
Hallo,

langsam kommen wir der Sache näher. Wenn die z-Komponenten gleich sind, dann lasse sie doch komplett weg?

Haben die Punktwolken ähnliche Umrisse? Ein Beispiel wäre sehr hilfreich.

Du könntest beispielsweise eine Abbildung y = A*x + b (x aus erster Punktewolke, y aus zweiter Punktwolke, A eine zu bestimmende Matrix und b ein zu bestimmender Vektor) verwenden und die unbekannten Größen mit Solvern der Optimization Toolbox anpassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2016, 18:37     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ja die haben ähnlich Umrisse.

Ich verstehe deine Formel nicht ganz.


gruß Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.09.2016, 19:03     Titel:
  Antworten mit Zitat      
Hallo,

was verstehst du nicht daran?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2016, 20:41     Titel:
  Antworten mit Zitat      
Ich weiß nicht wie ich den code in meinem Programm übernehmen soll, kann mir auch nichts dabei vorstellen.
Solvern Optimization Toolbox habe ich auch keine Plan, aber das kann ich ja nachschauen. Wäre es möglich das du es mit mal anhand eines Beispiels erklärst ?

Gruß Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.09.2016, 21:01     Titel:
  Antworten mit Zitat      
Hallo,

ich habe eigentlich schon alles relevante geschrieben.
In A und b sind 6 Parameter enthalten, die durch einen Solver der Optimization Toolbox, z.B. fmincon, variiert und so optimiert werden sollen.

Zielfunktion
Code:
function fehler = abweichung(p, xdata, ydata)
% xdata, ydata: 2xn-Matrizen mit Daten
% p: Parametervektor mit a11, a12, a21, a22, b1, b2

A = [p(1), p(2); p(3), p(4)];
b = [p(5); p(6)];
abweichung = norm( sum( (A*xdata + repmat(b, 1, size(xdata, 2)) - ydata).^2 ) );


Grüße,
Harald
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 - 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.