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

Problem bei der Ausgabe von Zwischenergebnissen

 

Nyph0on
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 22.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 13:14     Titel: Problem bei der Ausgabe von Zwischenergebnissen
  Antworten mit Zitat      
Hallo,
Ich bin Maschinenbauer und daher eher beschränkt im Umgang mit Matlab. Jedoch habe ich folgendes Problem:
Ich habe eine Konstruktion die sich in Abhängigkeit von 3 Segmenten schlangenartig verformen kann. Jedes Segment kann dabei einen Bereich von +-98° Verformung vollziehen. Nun wollte ich zur kompletten Raumbestimmung die Positionen mittels Koordinatentransformation von Matlab ausgeben lassen. und als Punktewolke grafisch darstellen.
Da es sich dabei allerdings um Insgesamt 186^3 mögliche Kombinationen handelt, und ich für den Versuch Rechenzeit sparen will, habe ich die Winkeländerung immer mit 14° vorgegeben. Das funktioniert auch, jedoch ist das Ergebnis nicht richtig. Mal abgesehen davon das eine 0 nicht möglich ist.

Ich habe ja die Vermutung, dass die Ausgabe der Zwischenergebnisse nicht richtig funktioniert....

Nach nun Tagelanger Suche seit Ihr meine letzte Hoffnung Sad

Code:

a=1536;  %Länge Segment 1
b=1280;  %Länge Segment 2
c=1013.8;  %Länge Segment 3
   
sx=0;
sy=0;

alpha=-98; %winkel Segment1
beta=-98; %winkel Segment2
gamma=-98; %winkel Segment3
for i=1:1:14
    beta=-98;
    for n=1:1:14
        gamma=-98;
        for u=1:1:14
            alpha_rad=alpha*pi/180;
            beta_rad=beta*pi/180;
            gamma_rad=gamma*pi/180;

            %---------Bestimmen der Einzelradien-------------------------

            Radius_a=a/alpha_rad;
            Radius_b=b/beta_rad;
            Radius_c=c/gamma_rad;

            %---------Berechnen der Einzelkoordinaten--------------------

            ay=-Radius_a*sin(alpha_rad);
            ax=-ay*tan(alpha_rad/2);

            by=-Radius_b*sin(beta_rad);
            bx=-by*tan(beta_rad/2);

            cy=-Radius_c*sin(gamma_rad);
            cx=-cy*tan(gamma_rad/2);

            %---------Rotationsmatritzen------
            rot_alpha=[...
                cos(alpha_rad) -sin(alpha_rad);...
                sin(alpha_rad) cos(alpha_rad)];
            rot_beta=[...
                cos(beta_rad) -sin(beta_rad);...
                sin(beta_rad) cos(beta_rad)];

            A=[ax; ay];
            B=[bx; by];
            C=[cx; cy];

            S=A+(rot_alpha*(B+(rot_beta*C)))
            sx(i*n*u)=S(1,1);
            sy(i*n*u)=S(2,1);
         
            gamma=gamma+14;
        end
     
            alpha_rad=alpha*pi/180;
            beta_rad=beta*pi/180;
            gamma_rad=gamma*pi/180;

            %---------Bestimmen der Einzelradien-------------------------

            Radius_a=a/alpha_rad;
            Radius_b=b/beta_rad;
            Radius_c=c/gamma_rad;

            %---------Berechnen der Einzelkoordinaten--------------------

            ay=-Radius_a*sin(alpha_rad);
            ax=-ay*tan(alpha_rad/2);

            by=-Radius_b*sin(beta_rad);
            bx=-by*tan(beta_rad/2);

            cy=-Radius_c*sin(gamma_rad);
            cx=-cy*tan(gamma_rad/2);

            %---------Rotationsmatritzen------
            rot_alpha=[...
                cos(alpha_rad) -sin(alpha_rad);...
                sin(alpha_rad) cos(alpha_rad)];
            rot_beta=[...
                cos(beta_rad) -sin(beta_rad);...
                sin(beta_rad) cos(beta_rad)];

            A=[ax; ay];
            B=[bx; by];
            C=[cx; cy];

            S=A+(rot_alpha*(B+(rot_beta*C)))
            sx(i*u*n)=S(1,1);
            sy(i*n*u)=S(2,1);
           
            beta=beta+14;
    end

            alpha_rad=alpha*pi/180;
            beta_rad=beta*pi/180;
            gamma_rad=gamma*pi/180;

            %---------Bestimmen der Einzelradien-------------------------

            Radius_a=a/alpha_rad;
            Radius_b=b/beta_rad;
            Radius_c=c/gamma_rad;

            %---------Berechnen der Einzelkoordinaten--------------------

            ay=-Radius_a*sin(alpha_rad);
            ax=-ay*tan(alpha_rad/2);

            by=-Radius_b*sin(beta_rad);
            bx=-by*tan(beta_rad/2);

            cy=-Radius_c*sin(gamma_rad);
            cx=-cy*tan(gamma_rad/2);

            %---------Rotationsmatritzen------
            rot_alpha=[...
                cos(alpha_rad) -sin(alpha_rad);...
                sin(alpha_rad) cos(alpha_rad)];
            rot_beta=[...
                cos(beta_rad) -sin(beta_rad);...
                sin(beta_rad) cos(beta_rad)];

            A=[ax; ay];
            B=[bx; by];
            C=[cx; cy];

            S=A+(rot_alpha*(B+(rot_beta*C)))
            sx(i*n*u)=S(1,1);
            sy(i*n*u)=S(2,1);
     
    alpha=alpha+14;
   
end
scatter(sx,sy,'DisplayName','sy vs sx','XDataSource','sx','YDataSource','sy');figure(gcf);



 


Grüße
Robert
_________________

Veni Vidi Violini - Ich kam, sah und vergeigte
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 16:10     Titel:
  Antworten mit Zitat      
Hallo Robert,

mir ist noch einiges unklar. Du rechnest außerhalb der gamma- bzw. beta-For-Schleife
mit gamma und beta. Wahrscheinlich weil Deine Schleifen zu kurz laufen. Von -98 bis
98 sind es 15 14°-Schritte.
Um es kurz zu sagen: Das Hauptprogramm sollte so aussehen:
Code:
sx = [];
sy = [];
for alpha=-98:14:98
  for beta=-98:14:98
    for gamma=-98:14:98
      [x,y] = rechne_endposition_aus_winkeln(alpha,beta,gamma);
      sx(end+1)=x;
      sy(end+1)=y;
    end;
  end;
end;
scatter(sx,sy,'DisplayName','sy vs sx','XDataSource','sx','YDataSource','sy');


Das behebt schon das nächste Problem.
Code:
sx(i*n*u) = S(1,1);

füllt den Vektor sx nicht von Elemente 1 bis N, sondern munter kreuz und quer.
Eine fortlaufende Nummerierung erhälts du mit:
Code:
sx(((i*15 + n)*15 +u) = S(1,1);


Nun zur eigentlichen Rechnung. Am besten lagerst Du die Berechnung in eine eigene
Funktion aus, z.B:
Code:
function [x, y] = rechne_endposition_aus_winkeln(alpha,beta,gamma);

und prüfst, ob sie für einfache Fälle (z.B. 0,0,0 oder 90,90,90) überhaupt das
richtige Ergebnis liefert.
Der Sinn von Radius_a=a/alpha_rad; ist mir noch nicht ganz klar.
Eine Version mit einem und dann mit zwei Gelenken zum Testen hilft oft bei der
Fehlersuche.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Nyph0on
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 22.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2012, 20:56     Titel:
  Antworten mit Zitat      
Unglauiblich, vielen Dank. Das funktioniert endlich einwandfrei.

Warum hab ich euch nicht schon früher gefragt. Ganz großes Dankeschön
_________________

Veni Vidi Violini - Ich kam, sah und vergeigte
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 - 2025 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.