Verfasst am: 11.09.2016, 21:00
Titel: Verdrehung eine Punkten in Abhängigkeit eines Winkels
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.
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.
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.
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);
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 ?
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.
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.
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 ?
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));
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
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.