Verfasst am: 11.09.2019, 21:20
Titel: 3d-Kurve in 2d drehen/projeieren
Hallo,
ich habe eine Kurve, die aus vielen Messpunkten (XYZ-Koordinaten der Punkte sind gemessen) besteht. Im Großen und ganzen liegen alle diese Punkte der Kurve in einer Ebene (Abweichungen von wenigen 1/1000 mm). Als erstes lasse ich mir die Kurve im 3D plotten, benötige aber zur Weiterverarbeitung die Kurve auf ein 2D-Koordinaten-System gedreht/projeziert.
Eine Idee wäre sich die Drehwinkel aus identischen Punkten errechnen zu lassen. Z.B. indem man den Anfangspunkt (A(XA,YA,ZA)) in den Koordinaten-Ursprung (A(UA,VA,WA)) =A(0,0,0) projeziert, den Endpunkt (C) auf die neue U-Achse. Einen Maßstab benötige ich nicht. Die Translation wären ja quasi die Koordinaten von A, aber wie komme ich auf die Drehwinkel der Drehmatrix. Die Drehmatrix benötige ich, um alle anderen Punkte der Kurve in das UVW-Koordinatensstem zu transformieren...
Vielleicht gibt es ja noch andere Ideen, die Messpunkte in ein 2D-Koordinatensystem zu überführen
anz_Pt = length(X_XYZ); % [-] Anzahl der Punkte einer Kante
% A B C sind Punkte der Ebene
A_XYZ = [X_XYZ(1);Y_XYZ(1);Z_XYZ(1)]; % [mm] Anfangspunkt Kurve
B_XYZ = [X_XYZ(ceil(anz_Pt/2));Y_XYZ(ceil(anz_Pt/2));Z_XYZ(ceil(anz_Pt/2))]; % [mm] mittlerer Punkt Kurve
C_XYZ = [X_XYZ(anz_Pt);Y_XYZ(anz_Pt);Z_XYZ(anz_Pt)]; % [mm] Endpunkt Kurve
a = norm(B_XYZ-C_XYZ); % [mm] Abstand zwischen B und C
b = norm(A_XYZ-C_XYZ); % [mm] Abstand zwischen A und C
c = norm(A_XYZ-B_XYZ); % [mm] Abstand zwischen A und B
alpha = acosd((b^2+c^2-a^2)/(2*b*c)); % [deg] Winkel zwischen b und c bzw. an A beta = acosd((a^2+c^2-b^2)/(2*a*c)); % [deg] Winkel zwischen a und c bzw. an B gamma = acosd((a^2+b^2-c^2)/(2*a*b)); % [deg] Winkel zwischen a und b bzw. an C
v_B_UVW_1 = c*sind(alpha); % [mm] Koordinaten v von B_UVW --> B_UVW(u,v,w)
u_B_UVW_1 = c*cosd(alpha); % [mm] Koordinaten u von B_UVW --> B_UVW(u,v,w)
v_B_UVW_2 = a*sind(gamma); % [mm] Koordinaten v von B_UVW --> B_UVW(u,v,w)
u_B_UVW_2 = c - a*cosd(gamma); % [mm] Koordinaten u von B_UVW --> B_UVW(u,v,w)
u_C_UVW = c; % [mm] Koordinaten u von C_UVW --> C_UVW(u,v,w)
A_UVW = [0;0;0]; % [mm] Koordinaten von A_UVW(u,v,w)
B_UVW_1 = [u_B_UVW_1;v_B_UVW_1;0]; % [mm] Koordinaten von A_UVW(u,v,w)
B_UVW_2 = [u_B_UVW_2;v_B_UVW_2;0]; % [mm] Koordinaten von A_UVW(u,v,w)
C_UVW = [u_C_UVW;0;0]; % [mm] Koordinaten von A_UVW(u,v,w)
Also hat jemand Ahnugn wie ich die Drehwinkel berechnen kann, sodass der Anfangspunkt in (0,0,0) verschoben wird und C auf einer Achse landet? Die restlichen Punkte, könnte ich ja dann mit der berechneten Drehmatrix transformieren.
Danke schonmal!!!
kurve1.fig
Beschreibung:
Das ist eine Beispielkurve. Brauche das ganze dann für zig Kurven...
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.