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

normale Matrizenoperation innerhalb einer S-Function in C

 

Elena83
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.08
Wohnort: Paderborn
Version: ---
     Beitrag Verfasst am: 08.01.2009, 14:29     Titel: normale Matrizenoperation innerhalb einer S-Function in C
  Antworten mit Zitat      
Hallo,

ich versuche gerade einen Simulink-Block zu programmieren, der innerhalb eines getriggerten Subsystems eine Berechnung macht und dann die Werte nacheinander ausgibt.

Das funktioniert auch soweit, problematisch sind aber die Ergebnisse der mathematischen Berechnungen.

Und zwar will ich einen 2D-Eingangsvektor mit einer Drehmatrix drehen (Code siehe unten).
Die Winkel, die dann am Ende rauskommen sind allerdings sehr seltsam...

Woran kann das liegen??

Gruß, Elena


//Eingangssignale
InputRealPtrsType xPtrs = ssGetInputPortRealSignalPtrs(S,0);
InputRealPtrsType yPtrs = ssGetInputPortRealSignalPtrs(S,1);
//Ausgangssignale
real_T *out_X = ssGetOutputPortSignal(S,0); //Pointer??
real_T *out_Y = ssGetOutputPortSignal(S,1);
//Eingangssignale
real_T x = *(xPtrs[0]);
real_T y = *(yPtrs[0]);

//alpha = 0 auf der x-Achse
real_T alpha = atan(y/x); //atan gibt Wert in rad aus
//Startpunkt des zu zeichnenden Vektors (veränderbar!):
real_T P0[] = { 0, 0};
real_T P1[] = { 0, 0};
real_T P2[]= {-1, 1};
real_T P3[]= {-1,-1};


//Pfeilspitze am Ursprung:
real_T M_Dreh[2][2];
if (x >= 0) {
M_Dreh[0][0] = cos (alpha);
M_Dreh[0][1] = -sin (alpha);
M_Dreh[1][0] = sin (alpha);
M_Dreh[1][1] = cos (alpha);
//M_Dreh = {{cos(alpha), sin(alpha)},{-sin(alpha),cos(alpha)}};
//Fehlermeldung double[][] != int...
}
else {
M_Dreh[0][0] = -cos (alpha);
M_Dreh[0][1] = sin (alpha);
M_Dreh[1][0] = -sin (alpha);
M_Dreh[1][1] = -cos (alpha);
//M_Dreh*(-1)
}

P1[0] = P0[0]+ x + (P1[0]*M_Dreh[0][0]+P1[1]*M_Dreh[0][1]);
P1[1] = P0[1]+ y + (P1[1]*M_Dreh[1][0]+P1[0]*M_Dreh[1][1]);

P2[0] = P0[0]+ x + (P2[0]*M_Dreh[0][0]+P2[1]*M_Dreh[0][1]);
P2[1] = P0[1]+ y + (P2[1]*M_Dreh[1][0]+P2[0]*M_Dreh[1][1]);

P3[0] = P0[0]+ x + (P3[0]*M_Dreh[0][0]+P3[1]*M_Dreh[0][1]);
P3[1] = P0[1]+ y + (P3[1]*M_Dreh[1][0]+P3[0]*M_Dreh[1][1]);
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.