ich habe ein Problem vielleicht können sie mir helfen.
anbei haben sie eine vorstellung meine geploteten Aufgabe.
wie sie sehen können, habe ich 2 koordinaten System(0,1)
über die Matrix transformation der Homogene Koordinaten könnte ich die Translation erzeugen.
ich will ein dreh marix erzeugen so , dass die X1, Y1,Z1 Achsen jeweils in richtung der X0,Y0 und Z0 Achsen orientiert wird. Bis jetzt könnte ich schon die Rotationmatrix erzeugen aber das Problem ist das die Vektoren drehen sich entwerde in der Richtung der Uhr Anzeige oder in der gegenrichung.
hier ist meine code bitte um Hilfe
bitte um zu plotten folgende befehl benützen plotframe_16_05(z,3,'1')
z= 0:15
viele Grüße
Code:
% Das ist mein Programm. function plotframe_16_05(z,len,label)
%pi = 3.1416;
a = 0;
Test_angle1 = 0;
b = 0;
%g = 3;
J = 20;
MovieObj=VideoWriter('AviExample2.avi'); % Create the movie opject
MovieObj.FrameRate=1000; % Set the properties if desired e.g. the framerate open(MovieObj)% Get the movie object ready for writing
Fig=figure('position',[1002001000700]);
%test = ((angle*pi)/180);
for i = 0:5:z
a = a+1;
b= b+1;
fprintf('\n Ausgabe a = %4.3f Grad ',a);
k = i+J;
T = [ 100 k
010 k
001 i
0001];
J = J-10;
ifexist('label', 'var') == 0
label = 'hello';
end % Die neue Origin wird gefunden O1 = T*[0 0 0 1]'
O1 = T*[0001]';
O1 = O1(1:3);
% Berechnung der Winkel Zwischen Ursprung und die Deichsel
%U = Ursprung D = Deichsel
OU = [20200]' - [000]';%
OD = [O1(1) O1(2) O1(3)]' - [000]';%
c_0U = dot(OU,OD);
Betrag_OU = sqrt(dot(OU,OU));
Betrag_OD = sqrt(dot(OD,OD));
Betrag_0U = Betrag_OU * Betrag_OD;
cos_Winkel_0U = c_0U / Betrag_0U;
Winkel_0U = acos(cos_Winkel_0U);
Final_Winkel_0U = (Winkel_0U * 180)/pi;
fprintf('\n Winkel um O Ursprung Alpha = %4.3f Grad ',Final_Winkel_0U);
if a >= 0 % Berechnung der Winkel zwei Deichsel Stellung grün Farbe
Final_angle = Final_Winkel_0U - Test_angle1;
fprintf('\n Test_angle ist = %4.3f Grad ',Final_angle);
fprintf('\n');
Test_angle1 = Final_Winkel_0U;
end
if a == 1% Berechnung von X1 angle = ((Final_angle*pi)/180);
%Darstellung der an der Deichsel bewegten, ersten Beschleunigungssensor
plot3([O1(1) X1(1)], [O1(2) X1(2)], [O1(3) X1(3)],'Marker','.','LineStyle','-');
text(X1(1), X1(2), X1(3), strcat('x',label));
hast du mein code ausgeführt? wenn ja. hast du doch mal gesehen wie die vektoren sich drehen oder? sie drehen sich immer in Richung eine Uhranzeige oder in der gegenrichtung.
Das will ich aber nicht. Ich möchte dass die Vektoren X1,Y1,Z1 jeweils in Richtung der Vekoren X0,Y0 und Z0 zeigen, wenn sie sich drehen. Das heißt für mich wenn zum Beispiel der Vektor Z1 senkrecht zur roe linie steht, wird er immer senkrecht bleiben im laufe der Ausführung.
Deshalb habe ich auch nebenbei jeweils die Winkel berechnet.
Ich hoffe, könnest du verstehen, worauf ich hinaus will.
Ich kann Deinen Code nicht ausführen, weil ich kein Matlab zur Verfügung habe.
Wie können sich denn Vektoren drehen und gleichzeitig in Richtung dreier anderer Vektoren zeigen?
Zitat:
Deshalb habe ich auch nebenbei jeweils die Winkel berechnet.
Es ist für Dich bestimmt ganz klar, welche Stelle des Codes hiermit gemeint ist, aber als Leser im Forum kann man das kaum erraten.
Ich verstehe also noch nicht, was Dein Ziel ist.
Der Code ist viel zu umfangreich, um beim drüberschauen zu verstehen, was er macht. Aber Änderungsvorschläge würden genau das benötigen.
Wie können wir Dir also genau helfen?
hallo Jan,
bedanke mich erst bei dir für deine Mühe.
Zitat:
Wie können sich denn Vektoren drehen und gleichzetitig in Richtung dreier anderer Vektoren zeigen?
habe mich vielleicht falsch ausgedruckt. Meine Code beschreibt die Homogene Rotation(Drehmatrix) eines Koordinaten Systems. Die Vektoren drehen sich um alle Achsen gleichzeitig in richung der Uhrzeiger.
Mein Problem besteht jetzt darin, dass ich nicht mehr will, dass die Vektoren auf die Richtung einer Uhranzeiger sich drehen sondern, dass die Vektoren sich in richtung der UrsprungsKoordinatensystem(X0,Y0,Z0) drehen.
Hier ist meine Code Vereinfacht.
Code:
% function plotframe(T, len, label) % T - 4x4 homogeneous transform % len - hier ist die länge von der Axe % label - text für die x,y,z labels
%
% len and label sind optional und auch default- werte auf 1 und ''
function plotframe_23_05(z,len,label)
%pi = 3.1416;
a = 0;
Test_angle1 = 0;
b = 0;
%g = 3;
J = 20;
MovieObj=VideoWriter('AviExample2.avi'); % Create the movie opject
MovieObj.FrameRate=1000; % Set the properties if desired e.g. the framerate open(MovieObj)% Get the movie object ready for writing
Fig=figure('position',[1002001000700]);
%test = ((angle*pi)/180);
for i = 0:5:z
a = a+1;
b= b+1;
fprintf('\n Ausgabe a = %4.3f Grad ',a);
k = i+J;
T = [ 1000 010 k
001 i
0001];
J = J-10;
ifexist('label', 'var') == 0
label = 'hello';
end % Die neue Origin wird gefunden O1 = T*[0 0 0 1]'
O1 = T*[0001]';
O1 = O1(1:3);
% Berechnung der Winkel Zwischen Ursprung und die Deichsel
%U = Ursprung D = Deichsel
OU = [0200]' - [000]';%
OD = [O1(1) O1(2) O1(3)]' - [000]';%
c_0U = dot(OU,OD);
Betrag_OU = sqrt(dot(OU,OU));
Betrag_OD = sqrt(dot(OD,OD));
Betrag_0U = Betrag_OU * Betrag_OD;
cos_Winkel_0U = c_0U / Betrag_0U;
Winkel_0U = acos(cos_Winkel_0U);
Final_Winkel_0U = (Winkel_0U * 180)/pi;
fprintf('\n Winkel um O Ursprung Alpha = %4.3f Grad ',Final_Winkel_0U);
if a >= 0 % Berechnung der Winkel zwei Deichsel Stellung grün Farbe
Final_angle = Final_Winkel_0U - Test_angle1;
fprintf('\n Test_angle ist = %4.3f Grad ',Final_angle);
fprintf('\n');
Test_angle1 = Final_Winkel_0U;
end
if a == 1% Berechnung von X1 angle = ((Final_angle*pi)/180);
%Darstellung der an der Deichsel bewegten, ersten Beschleunigungssensor
plot3([O1(1) X1(1)], [O1(2) X1(2)], [O1(3) X1(3)],'Marker','.','LineStyle','-');
text(X1(1), X1(2), X1(3), strcat('x',label));
Meine Code beschreibt die Homogene Rotation(Drehmatrix) eines Koordinaten Systems.
das ist soweit klar.
Zitat:
Die Vektoren drehen sich um alle Achsen gleichzeitig in richung der Uhrzeiger.
Was sind "die Vektoren" und um welche Variablen geht es im Code dabei? Was sind "alle Achsen"?
Zitat:
Mein Problem besteht jetzt darin, dass ich nicht mehr will, dass die Vektoren auf die Richtung einer Uhranzeiger sich drehen sondern, dass die Vektoren sich in richtung der UrsprungsKoordinatensystem(X0,Y0,Z0) drehen.
Was ist X0, Y0, Z0 im Code?
Heißt das, dass Du die geeignete Rotations-Matrix suchst, welche beliebige (aber aufeinander senkrecht stehende?) Vektoren zurück in das Reference-System dreht? Dazu gibt es ja keine eindeutige Lösung, welche möchtest Du dann wählen?
Der Code ist immer noch zu umfangreich für eine Diskussion im Forum.
Wo genau würden denn die Änderungen im Code notwendig sein?
Heißt das, dass Du die geeignete Rotations-Matrix suchst, welche beliebige (aber aufeinander senkrecht stehende?) Vektoren zurück in das Reference-System dreht? Dazu gibt es ja keine eindeutige Lösung, welche möchtest Du dann wählen?
genau das will ich haben. ich suche einfach die geeignete Rotations-Matrix
Zitat:
Was ist X0, Y0, Z0 im Code?
X0, Y0, Z0 sind die Ursprungs Koordinatensystem bzw. Reference-System(0 0 0).
Zitat:
Wo genau würden denn die Änderungen im Code notwendig sein?
hier diese Orthogonale Rotationmatrix möchte ich eine passende für meine Lösung finden
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.