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

3D-Voxeldaten in simulink einbinden

 

guguli
Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 08:43     Titel: 3D-Voxeldaten in simulink einbinden
  Antworten mit Zitat      
Hallo zusammen,

ich habe einen Code womit ich eine Geometrie erstellen kann. Nun möchte ich dieser Geometrie bestimmte Eigenschaften z.B. mechanische, aus Simulink einfügen.

Ich hab mir folgendes Überlegt:
Den aus Simulink errechneten Wert werde ich als input einer Matlbafunction in simulink benutzen. Nun rufe ich mit der Matlabfunction die mflie auf, die diese Geometrie erzeugt, und möchte den errechneten Wert der Geometrie als ihre Eigenschaft übergeben. wir nehmen an, Die geometrie befindet sich in dem Koordinaten System an der Stelle [5 5 5].
Frage:
Wie kann ich Den errechneten Simulink wert dieser Stelle übergeben???

Also das ist die Funktion die eine Geometrie erzeugt:
Code:
function test_environment(i,d,c,alpha)

switch(nargin),
case 0
   i = [5 5 5];
   d= [1 1 1];
   c= 'b';
   alpha = 0.5;
case 1
    l=1;    %default length of side of voxel is 1
    c='b';  %default color of voxel is blue
case 2,
    c='b';
case 3,
    alpha=1;
case 4,
    %do nothing
otherwise
    disp('Too many arguements for voxel');
end;

x=[i(1)+[0 0 0 0 d(1) d(1) d(1) d(1)]; ...
        i(2)+[0 0 d(2) d(2) 0 0 d(2) d(2)]; ...
        i(3)+[0 d(3) 0 d(3) 0 d(3) 0 d(3)]]';
for n=1:3,
    if n==3,
        x=sortrows(x,[n,1]);
    else
        x=sortrows(x,[n n+1]);
    end;
    temp=x(3,:);
    x(3,:)=x(4,:);
    x(4,:)=temp;
    h=patch(x(1:4,1),x(1:4,2),x(1:4,3),c);
    set(h,'FaceAlpha',alpha);
    temp=x(7,:);
    x(7,:)=x(8,:);
    x(8,:)=temp;
    h=patch(x(5:8,1),x(5:8,2),x(5:8,3),c);
    set(h,'FaceAlpha',alpha);
   
    %WeltkoordinatenSystem
    axis([0,10,0,10,0,10])
    xlabel('X-Achse')
    ylabel('Y-Achse')
    zlabel('Z-Achse')
    grid on
    hold off
end;
 

und das ist die Matlabfunktion in Simulink die ein Input bekommt und die obige funktion aufruft und übergibt dieser den Input.
Code:
function y = load_handles(u)
%#codegen

y = @test_environment;
end

hier weiss ichleider nicht wie ich den Input übergeben kann.

welche möglichkeiten hab ich denn ?
Paart tips wären sehr hilfsreich Smile

THX
Private Nachricht senden Benutzer-Profile anzeigen


knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 10:26     Titel:
  Antworten mit Zitat      
Läuft bei dir die Simulation die ganze Zeit und du willst zu einem bestimmten Zeitpunkt den Wert aus der Simulation nehmen, um damit dann eine mfile in matlab starten?

Edit: Vielleicht hilft dir der Beitrag: http://www.gomatlab.de/script-aus-m.....fuehren-t24691.html#95693
Private Nachricht senden Benutzer-Profile anzeigen
 
guguli
Themenstarter

Forum-Century

Forum-Century


Beiträge: 166
Anmeldedatum: 04.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 12:24     Titel:
  Antworten mit Zitat      
Ich bin das ganze falsch angefangen.
Ich mach das jetzt so, dass ich Alles in einem funktionsblock habe. :
Code:
function y  = handle (u)

    y = test_environment(u);


function  y = test_environment(u)

switch(nargin),
case 0
   i = [5 5 5];
   d= [1 1 1];
   c= 'b';
   alpha = 0.5;
case 1
    l=1;    %default length of side of voxel is 1
    c='b';  %default color of voxel is blue
case 2,
    c='b';
case 3,
    alpha=1;
case 4,
    %do nothing
otherwise
    disp('Too many arguements for voxel');
end;

x=[i(1)+[0 0 0 0 d(1) d(1) d(1) d(1)]; ...
        i(2)+[0 0 d(2) d(2) 0 0 d(2) d(2)]; ...
        i(3)+[0 d(3) 0 d(3) 0 d(3) 0 d(3)]]';
for n=1:3,
    if n==3,
        x=sortrows(x,[n,1]);
    else
        x=sortrows(x,[n n+1]);
    end;
    temp=x(3,:);
    x(3,:)=x(4,:);
    x(4,:)=temp;
    h=patch(x(1:4,1),x(1:4,2),x(1:4,3),c);
    set(h,'FaceAlpha',alpha);
    temp=x(7,:);
    x(7,:)=x(8,:);
    x(8,:)=temp;
    h=patch(x(5:8,1),x(5:8,2),x(5:8,3),c);
    set(h,'FaceAlpha',alpha);
%WeltkoordinatenSystem
    axis([0,10,0,10,0,10])
    xlabel('X-Achse')
    ylabel('Y-Achse')
    zlabel('Z-Achse')
    grid on
    hold off
   
end;
 

Nun will ich das u, also seinen Wert in die Geometrie einfügen. Das soll heißen, in meinem Koordinatensystem do wo nichts ist, hat man den Wert 0 und da wo die Geometrie ist hat man den wert u. Also voxel weise.

Wie kann ich das denn realisieren??
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.