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

Homogene_Transformation

 

cebalo
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2013, 10:35     Titel: Homogene_Transformation
  Antworten mit Zitat      
hallo,

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',[100 200 1000 700]);
    %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 = [
    1 0 0 k
    0 1 0 k
    0 0 1 i
    0 0 0 1];
    J = J-10;
           
if nargin < 2
     len = 1;
end

if exist('label', 'var') == 0
   label = 'hello';
end
% Die neue Origin wird gefunden O1 = T*[0 0 0 1]'
O1 = T*[0 0 0 1]';
O1 = O1(1:3);


    % Berechnung der Winkel Zwischen Ursprung  und die Deichsel
    %U = Ursprung D = Deichsel
    OU = [20 20 0]' - [0 0 0]';%
    OD =  [O1(1) O1(2) O1(3)]' - [0 0 0]';%
    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);
   
%      Rz = [
%           cos(angle) -sin(angle) 0 0
%           sin(angle) cos(angle) 0 0
%           0 0 1 0
%           0 0 0 1];
%     Ry = [
%         cos(angle) 0 sin(angle) 0
%         0  1 0 0
%         -sin(angle) 0 cos(angle) 0
%         0 0 0 1];
%
%     Rx = [
%          1 0 0 0
%         0 cos(angle) -sin(angle) 0
%         0 sin(angle) cos(angle) 0
%         0 0 0 1];

%     R = Rx*Ry*Rz;
    R = [
    cos(angle)*cos(angle) cos(angle)*sin(angle)*sin(angle)-cos(angle)*sin(angle)  cos(angle)*cos(angle)*sin(angle)+sin(angle)*sin(angle) 0
    cos(angle)*sin(angle) cos(angle)*cos(angle)+sin(angle)*sin(angle)*sin(angle)  cos(angle)*sin(angle)*sin(angle)-sin(angle)*cos(angle) 0
    -sin(angle)           sin(angle)*cos(angle)                                   cos(angle)*cos(angle)                                  0
    0                     0                                                       0                                                      1];
   
    %  Position der Einheitsvektor entlang x
    X1 = T*R*[len 0 0 1]';
    X1 = X1(1:3);
   
    %Position der Einheitsvektor entlang y
    Y1 =T*R*[0 len 0 1]';
    Y1 = Y1(1:3);

    % Position der Einheitsvektor entlang z
    Z1 =T*R*[0 0 len 1]';
    Z1 = Z1(1:3);
   
   
    AB_X = [0 0 0]' - [O1(1) O1(2) O1(3)]';%
    AC_X =  [X1(1) X1(2) X1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_X  = dot(AB_X,AC_X);
    Betrag_AB_X = sqrt(dot(AB_X,AB_X));
    Betrag_AC_X = sqrt(dot(AC_X,AC_X));
    Betrag_X =  Betrag_AB_X *  Betrag_AC_X;
    cos_Winkel_X = c_X / Betrag_X;
    Winkel_X = acos(cos_Winkel_X);
    Final_Winkel_X = (Winkel_X * 180)/pi;
    fprintf('\n Winkel um X ist = %4.3f Grad ',Final_Winkel_X);

    AB_Y = [0 0 0]' - [O1(1) O1(2) O1(3)]';%
    AC_Y =  [Y1(1) Y1(2) Y1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_Y  = dot(AB_Y,AC_Y);
    Betrag_AB_Y = sqrt(dot(AB_Y,AB_Y));
    Betrag_AC_Y = sqrt(dot(AC_Y,AC_Y));
    Betrag_Y =  Betrag_AB_Y *  Betrag_AC_Y;
    cos_Winkel_Y = c_Y / Betrag_Y;
    Winkel_Y = acos(cos_Winkel_Y);
    Final_Winkel_Y = (Winkel_Y * 180)/pi;
    fprintf('\n Winkel um Y ist = %4.3f Grad ',Final_Winkel_Y);
   
    AB_Z = [0 0 0]' - [O1(1) O1(2) O1(3)]';%
    AC_Z =  [Z1(1) Z1(2) Z1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_Z  = dot(AB_Z,AC_Z);
    Betrag_AB_Z = sqrt(dot(AB_Z,AB_Z));
    Betrag_AC_Z = sqrt(dot(AC_Z,AC_Z));
    Betrag_Z =  Betrag_AB_Z *  Betrag_AC_Z;
    cos_Winkel_Z = c_Z / Betrag_Z;
    Winkel_Z = acos(cos_Winkel_Z);
    Final_Winkel_Z = (Winkel_Z * 180)/pi;
    fprintf('\n Skalar Produkt um Z ist = %4.0f  ',c_Z);
    fprintf('\n Winkel um Z ist = %4.3f Grad ',Final_Winkel_Z);
   
    % Berechnung der Ursprungswinkel zwischen X Y und X Z  und die Deichsel
    OX = [X1(1) X1(2) X1(3)]' - [O1(1) O1(2) O1(3)]';%
    OY =  [Y1(1) Y1(2) Y1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_XY  = dot(OY,OX);
    Betrag_OX = sqrt(dot(OX,OX));
    Betrag_OY = sqrt(dot(OY,OY));
    Betrag_XY =  Betrag_OX *  Betrag_OY;
    cos_Winkel_XY = c_XY / Betrag_XY;
    Winkel_XY = acos(cos_Winkel_XY);
    Final_Winkel_XY = (Winkel_XY * 180)/pi;
    fprintf('\n Winkel um XY ist = %4.3f Grad ',Final_Winkel_XY);
   
    OX = [X1(1) X1(2) X1(3)]' - [O1(1) O1(2) O1(3)]';%
    OZ =  [Z1(1) Z1(2) Z1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_XZ  = dot(OX,OZ);
    Betrag_OX = sqrt(dot(OX,OX));
    Betrag_OZ = sqrt(dot(OZ,OZ));
    Betrag_XZ =  Betrag_OX *  Betrag_OZ;
    cos_Winkel_XZ = c_XZ / Betrag_XZ;
    Winkel_XZ = acos(cos_Winkel_XZ);
    Final_Winkel_XZ = (Winkel_XZ * 180)/pi;
    fprintf('\n Winkel um XZ ist = %4.3f Grad ',Final_Winkel_XZ);
end

if a > 1
    angle = ((Final_angle*pi)/180);
   
%     Rz = [
%           cos(angle) -sin(angle) 0 0
%           sin(angle) cos(angle) 0 0
%           0 0 1 0
%           0 0 0 1];
%
%     Ry = [
%         cos(angle) 0 sin(angle) 0
%         0 1 0 0
%         -sin(angle) 0 cos(angle) 0
%         0 0 0 1];
%
%     Rx = [
%         1 0 0 0
%         0 cos(angle) -sin(angle) 0
%         0 sin(angle) cos(angle) 0
%         0 0 0 1];
%    
%     R = Rx*Ry*Rz;
   
    R = [
    cos(angle)*cos(angle) cos(angle)*sin(angle)*sin(angle)-cos(angle)*sin(angle)  cos(angle)*cos(angle)*sin(angle)+sin(angle)*sin(angle) 0
    cos(angle)*sin(angle) cos(angle)*cos(angle)+sin(angle)*sin(angle)*sin(angle)  cos(angle)*sin(angle)*sin(angle)-sin(angle)*cos(angle) 0
    -sin(angle)           sin(angle)*cos(angle)                                   cos(angle)*cos(angle)                                  0
    0                     0                                                       0                                                      1];
   
    %  Position der Einheitsvektor entlang x
    X1 =  T*R*[len 0 0 1]';
    X1 = X1(1:3);


    %Position der Einheitsvektor entlang y
    Y1 =  T*R*[0 len 0 1]';
    Y1 = Y1(1:3);


    % Position der Einheitsvektor entlang z
    Z1 =  T*R*[0 0 len 1]';
    Z1 = Z1(1:3);
   
   
    AB_X = [0 0 0]' - [O1(1) O1(2) O1(3)]';%
    AC_X =  [X1(1) X1(2) X1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_X  = dot(AB_X,AC_X);
    Betrag_AB_X = sqrt(dot(AB_X,AB_X));
    Betrag_AC_X = sqrt(dot(AC_X,AC_X));
    Betrag_X =  Betrag_AB_X *  Betrag_AC_X;
    cos_Winkel_X = c_X / Betrag_X;
    Winkel_X = acos(cos_Winkel_X);
    Final_Winkel_X = (Winkel_X * 180)/pi;
    fprintf('\n Winkel um X ist = %4.3f Grad ',Final_Winkel_X);


    AB_Y = [0 0 0]' - [O1(1) O1(2) O1(3)]';%
    AC_Y =  [Y1(1) Y1(2) Y1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_Y  = dot(AB_Y,AC_Y);
    Betrag_AB_Y = sqrt(dot(AB_Y,AB_Y));
    Betrag_AC_Y = sqrt(dot(AC_Y,AC_Y));
    Betrag_Y =  Betrag_AB_Y *  Betrag_AC_Y;
    cos_Winkel_Y = c_Y / Betrag_Y;
    Winkel_Y = acos(cos_Winkel_Y);
    Final_Winkel_Y = (Winkel_Y * 180)/pi;
    fprintf('\n Winkel um Y ist = %4.3f Grad ',Final_Winkel_Y);
    fprintf('\n  ');
   
    AB_Z = [0 0 0]' - [O1(1) O1(2) O1(3)]';%
    AC_Z =  [Z1(1) Z1(2) Z1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_Z  = dot(AB_Z,AC_Z);
    Betrag_AB_Z = sqrt(dot(AB_Z,AB_Z));
    Betrag_AC_Z = sqrt(dot(AC_Z,AC_Z));
    Betrag_Z =  Betrag_AB_Z *  Betrag_AC_Z;
    cos_Winkel_Z = c_Z / Betrag_Z;
    Winkel_Z = acos(cos_Winkel_Z);
    Final_Winkel_Z = (Winkel_Z * 180)/pi;
    fprintf('\n Skalar Produkt um Z ist = %4.0f  ',c_Z);
    fprintf('\n Winkel um Z ist = %4.3f Grad ',Final_Winkel_Z);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
%      % Berechnung der Ursprungswinkel zwischen X Y und X Z  und die Deichsel
    OX = [X1(1) X1(2) X1(3)]' - [O1(1) O1(2) O1(3)]';%
    OY =  [Y1(1) Y1(2) Y1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_XY  = dot(OX,OY);
    Betrag_OX = sqrt(dot(OX,OX));
    Betrag_OY = sqrt(dot(OY,OY));
    Betrag_XY =  Betrag_OX *  Betrag_OY;
    cos_Winkel_XY = c_XY / Betrag_XY;
    Winkel_XY = acos(cos_Winkel_XY);
    Final_Winkel_XY = (Winkel_XY * 180)/pi;
    fprintf('\n Winkel um XY ist = %4.3f Grad ',Final_Winkel_XY);
   
    OX = [X1(1) X1(2) X1(3)]' - [O1(1) O1(2) O1(3)]';%
    OZ =  [Y1(1) Y1(2) Y1(3)]' - [O1(1) O1(2) O1(3)]';%
    c_XZ  = dot(OX,OZ);
    Betrag_OX = sqrt(dot(OX,OX));
    Betrag_OZ = sqrt(dot(OZ,OZ));
    Betrag_XZ =  Betrag_OX *  Betrag_OZ;
    cos_Winkel_XZ = c_XZ / Betrag_XZ;
    Winkel_XZ = acos(cos_Winkel_XZ);
    Final_Winkel_XZ = (Winkel_XZ * 180)/pi;
    fprintf('\n Winkel um XZ ist = %4.3f Grad ',Final_Winkel_XZ);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
%     OZ_1=RZ;
%     OX_1=RY;
%     OY_1=RX;
end % end if a < 1


% Die Attribute der 3D-graph wird gestezt
clf;
axis equal;                            
lim = round(max(15)) + 5;
%lim = 50;
axis([-lim lim -lim lim -lim lim]);
set(gca,'Xdir','rev','YDir','rev')
grid on;
box on;
hold on;                              
xlabel('x');
ylabel('y');
zlabel('z');
title('Translation und Rotation');


line ([0 O1(1)], [0 O1(2)], [0 O1(3)],'Marker','.','LineStyle','-','color','r');

%line ([-15 5], [-15 -10], [-15 -5],'Marker','.','LineStyle','-','color','g');

%line ([5 O1(1)], [-10 O1(2)], [-5 O1(3)],'Marker','.','LineStyle','-','color','c');

%%%%%%%%%%Hier wird die Drehpunkt dargestellt%%%%%%%%%%%%%%%%
% line ([0 3], [0 0], [0 0],'Marker','.','LineStyle','-');
% text(3,0,0, '');
% line ([0 0], [0 3], [0 0],'Marker','.','LineStyle','-');
% text(0,3,0, '');
% line ([0 0], [0 0], [0 3],'Marker','.','LineStyle','-');
% text(0,0,3, '');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Darstellung der am Fahrzeug angeordneten, zweiten Beschleunigungssensoren
% plot3 ([5 2], [-10 -10], [-5 -5],'Marker','.','LineStyle','-');
% text(2,-10,-5, 'x2');
% line ([5 5], [-10 -2], [-5 -5],'Marker','.','LineStyle','-');
% text(5,-2,-5, 'y2');
% plot3 ([5 5], [-10 -10], [-5 -2],'Marker','.','LineStyle','-');
% text(5,-10,-2, 'z2');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% % Zeichnen und beschriften der ursprünglichen Achse
plot3 ([0 len], [0 0], [0 0],'Marker','.','LineStyle','-');
text(len,0,0, 'x0');
line ([0 0], [0 len], [0 0],'Marker','.','LineStyle','-');
text(0,len,0, 'y0');
plot3 ([0 0], [0 0], [0 len],'Marker','.','LineStyle','-');
text(0,0,len, 'z0');
 plot3 ([0 0], [0 0], [0 -len],'Marker','.','LineStyle','-');
 text(0,0,-len, 'g');
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%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));

line ([O1(1) Y1(1)], [O1(2) Y1(2)], [O1(3) Y1(3)],'Marker','.','LineStyle','-');
text(Y1(1), Y1(2), Y1(3), strcat('y',label));

plot3 ([O1(1) Z1(1)], [O1(2) Z1(2)], [O1(3) Z1(3)],'Marker','.','LineStyle','-');
text(Z1(1), Z1(2), Z1(3), strcat('z',label));
% line ([O1(1) 0], [O1(2) 0], [O1(3) -len],'Marker','.','LineStyle','-');
% text( 0,0,-len, 'g'); % Darstellung der Erdbeschleunigung

    frame=getframe(Fig); % Grab the frame
    writeVideo(MovieObj,frame); % Write the frame to the object
    pause(1);
%end

    end
close(MovieObj);


Matrix.fig
 Beschreibung:

Download
 Dateiname:  Matrix.fig
 Dateigröße:  5.41 KB
 Heruntergeladen:  403 mal
Private Nachricht senden Benutzer-Profile anzeigen


cebalo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2013, 10:59     Titel:
  Antworten mit Zitat      
hi,
ich möchte zum beispiel dass, der Z achse immer senkrecht zu der rote linien steht.
danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.05.2013, 13:04     Titel:
  Antworten mit Zitat      
Hallo cebalo,

Ich verstehe die Frage noch nicht. Du postest sehr viel Code und mir ist nicht klar, wo genau das Problem liegt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
cebalo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2013, 13:31     Titel:
  Antworten mit Zitat      
hallo Jan,

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.

Danke.

Cebalo
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.05.2013, 14:01     Titel:
  Antworten mit Zitat      
Hallo cebalo,

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?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
cebalo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2013, 14:41     Titel:
  Antworten mit Zitat      
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',[100 200 1000 700]);
    %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 = [
    1 0 0 0
    0 1 0 k
    0 0 1 i
    0 0 0 1];
    J = J-10;
           
if nargin < 2
     len = 1;
end

if exist('label', 'var') == 0
   label = 'hello';
end
% Die neue Origin wird gefunden O1 = T*[0 0 0 1]'
O1 = T*[0 0 0 1]';
O1 = O1(1:3);
   
    % Berechnung der Winkel Zwischen Ursprung  und die Deichsel
    %U = Ursprung D = Deichsel
    OU = [0 20 0]' - [0 0 0]';%
    OD =  [O1(1) O1(2) O1(3)]' - [0 0 0]';%
    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);
   
     Rz = [
          cos(angle) -sin(angle) 0 0
          sin(angle) cos(angle) 0 0
          0 0 1 0
          0 0 0 1];
    Ry = [
        cos(angle) 0 sin(angle) 0
        0  1 0 0
        -sin(angle) 0 cos(angle) 0
        0 0 0 1];

    Rx = [
         1 0 0 0
        0 cos(angle) -sin(angle) 0
        0 sin(angle) cos(angle) 0
        0 0 0 1];

    R = Rx*Ry*Rz;
    %  Position der Einheitsvektor entlang x
    X1 = T*R*[len 0 0 1]';
    X1 = X1(1:3);
   
    %Position der Einheitsvektor entlang y
    Y1 =T*R*[0 len 0 1]';
    Y1 = Y1(1:3);

    % Position der Einheitsvektor entlang z
    Z1 =T*R*[0 0 len 1]';
    Z1 = Z1(1:3);
   
   
 
end

if a > 1
    angle = ((Final_angle*pi)/180);
   
    Rz = [
          cos(angle) -sin(angle) 0 0
          sin(angle) cos(angle) 0 0
          0 0 1 0
          0 0 0 1];

    Ry = [
        cos(angle) 0 sin(angle) 0
        0 1 0 0
        -sin(angle) 0 cos(angle) 0
        0 0 0 1];

    Rx = [
        1 0 0 0
        0 cos(angle) -sin(angle) 0
        0 sin(angle) cos(angle) 0
        0 0 0 1];
   
    R = Rx*Ry*Rz;
   
    %  Position der Einheitsvektor entlang x
    X1 =  T*R*[len 0 0 1]';
    X1 = X1(1:3);


    %Position der Einheitsvektor entlang y
    Y1 =  T*R*[0 len 0 1]';
    Y1 = Y1(1:3);


    % Position der Einheitsvektor entlang z
    Z1 =  T*R*[0 0 len 1]';
    Z1 = Z1(1:3);
end % end if a < 1


% Die Attribute der 3D-graph wird gestezt
clf;
axis equal;                            
lim = round(max(15)) + 5;
%lim = 50;
axis([-lim lim -lim lim -lim lim]);
set(gca,'Xdir','rev','YDir','rev')
grid on;
box on;
hold on;                              
xlabel('x');
ylabel('y');
zlabel('z');
title('Translation und Rotation');

line ([0 O1(1)], [0 O1(2)], [0 O1(3)],'Marker','.','LineStyle','-','color','r');

% % Zeichnen und beschriften der ursprünglichen Achse
line ([0 0], [0 20], [0 0],'Marker','.','LineStyle','-');
text(0,20,0, 'Dv');
plot3 ([0 0], [0 0], [0 20],'Marker','.','LineStyle','-');
text(0,0,20, 'Dh');

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%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));

line ([O1(1) Y1(1)], [O1(2) Y1(2)], [O1(3) Y1(3)],'Marker','.','LineStyle','-');
text(Y1(1), Y1(2), Y1(3), strcat('y',label));

plot3 ([O1(1) Z1(1)], [O1(2) Z1(2)], [O1(3) Z1(3)],'Marker','.','LineStyle','-');
text(Z1(1), Z1(2), Z1(3), strcat('z',label));
% line ([O1(1) 0], [O1(2) 0], [O1(3) -len],'Marker','.','LineStyle','-');
% text( 0,0,-len, 'g'); % Darstellung der Erdbeschleunigung
    frame=getframe(Fig); % Grab the frame
    writeVideo(MovieObj,frame); % Write the frame to the object
    pause(1);
%end

    end
close(MovieObj);




 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.05.2013, 16:12     Titel:
  Antworten mit Zitat      
Hallo cebalo,

Sorry, ich kann dir immer noch nicht folgen.

Zitat:
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?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
cebalo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2013, 08:03     Titel:
  Antworten mit Zitat      
hallo jan,

Zitat:
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
Code:
   angle = ((Final_angle*pi)/180);
        Rz = [
          cos(angle) -sin(angle) 0 0
          sin(angle) cos(angle) 0 0
          0 0 1 0
          0 0 0 1];

    Ry = [
        cos(angle) 0 sin(angle) 0
        0 1 0 0
        -sin(angle) 0 cos(angle) 0
        0 0 0 1];

    Rx = [
        1 0 0 0
        0 cos(angle) -sin(angle) 0
        0 sin(angle) cos(angle) 0
        0 0 0 1];
   
    R = Rx*Ry*Rz;


Danke Jan.

Viele Gruß

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