⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v3d_import_mat.m

📁 matlab 三维显示。所有代码都有。可以显示三维网格。
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [x,y,z,v] = v3d_import_mat(filename)
%
% MatLab Workspace Datei importieren
% --------------------------------------------------------------------
%
% Format der Datei: MatLab spezifisch -> Import per ImportWizard
%
% Idealfall: 
%
%   Vektor x 
%   Vektor y
%   Vektor z
%   Matrix v - Dimension (y*x*z) bzw. in Blockkoordinaten (y-1*x-1*z-1)
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Importwizard aufrufen
s=uiimport(filename);
% Struktur in Zellen/Arrays umwandlen
ss=struct2cell(s);

% Fehlerflag anschalten
fehler=1;            

% Test ob 4 Datens鋞ze und ob mehr als 1 Wert pro Vektor
if (length(ss)==4 & length(ss{1})>1 & length(ss{2})>1 & length(ss{3})>1 & length(ss{4})>1)
    % finde Position der Matrix (size=3)
    posv=find([length(size(ss{1}))==3 length(size(ss{2}))==3 length(size(ss{3}))==3 length(size(ss{4}))==3]==1);
    % bestimme Anzahl der Vektoren (size=2) 
    anzxyz=length(find([length(size(ss{1}))==2 length(size(ss{2}))==2 length(size(ss{3}))==2 length(size(ss{4}))==2]==1));
    % Testen ob 3 Vektoren und 1 Matrix
    if (size(posv,1) & anzxyz==3)
        % v setzen
        v=ss{posv};
        % v aus Vektor s und ss entfernen
        names = fieldnames(s);
        s = rmfield(s,names{posv});
        % Struktur in Zellen/Arrays umwandlen
        ss=struct2cell(s);
        % names = feldnamen in s
        names = fieldnames(s);
        
        % Test ob x,y,z Vektoren Zeilenvektoren sind 
        % wenn nicht -> drehen
        % Achtung Gefahr: kann dadurch 180 grad verdeht sein
        if (size(ss{1},2)==1) ss{1}=rot90(ss{1}); end
        if (size(ss{2},2)==1) ss{2}=rot90(ss{2}); end
        if (size(ss{3},2)==1) ss{3}=rot90(ss{3}); end
               
        % Test ob x,y und z in den Feldnamen vorhanden sind
        if (strmatch('x',lower(names(:))) & strmatch('y',lower(names(:))) & strmatch('z',lower(names(:))))
            clear x y z;
            if strmatch('x',lower(names(1))) x=ss{1}; end
            if strmatch('y',lower(names(1))) y=ss{1}; end
            if strmatch('z',lower(names(1))) z=ss{1}; end
            if strmatch('x',lower(names(2))) x=ss{2}; end
            if strmatch('y',lower(names(2))) y=ss{2}; end
            if strmatch('z',lower(names(2))) z=ss{2}; end
            if strmatch('x',lower(names(3))) x=ss{3}; end
            if strmatch('y',lower(names(3))) y=ss{3}; end
            if strmatch('z',lower(names(3))) z=ss{3}; end
            % test ob x,y,z jetzt existieren
            if (exist('x') & exist('y') & exist('z'))
                % keine fehlerausgabe
                fehler=0;
            end
        elseif (length(ss{1})~=length(ss{2}) & length(ss{1})~=length(ss{3}) & length(ss{2})~=length(ss{3}))
            % Ansonsten versuchen per Feldgr鲞en zu unterscheiden
            % geht nur wenn Dimensionen von x,y und z sich unterscheiden
            clear x y z;
            % Test f黵 Mittelpunktkoordinaten
            if size(v,1)==length(ss{1}) y=ss{1}; end
            if size(v,2)==length(ss{1}) x=ss{1}; end
            if size(v,3)==length(ss{1}) z=ss{1}; end
            if size(v,1)==length(ss{2}) y=ss{2}; end
            if size(v,2)==length(ss{2}) x=ss{2}; end
            if size(v,3)==length(ss{2}) z=ss{2}; end
            if size(v,1)==length(ss{3}) y=ss{3}; end
            if size(v,2)==length(ss{3}) x=ss{3}; end
            if size(v,3)==length(ss{3}) z=ss{3}; end
            % test ob x,y,z jetzt existieren
            if (exist('x') & exist('y') & exist('z'))
                % keine fehlerausgabe
                fehler=0; 
            else
                clear x y z;
                % es konnten nicht alle zugewiesen werden
                % daher muessen Blockkoordinaten existieren
                if size(v,1)==length(ss{1})-1 y=ss{1}; end
                if size(v,2)==length(ss{1})-1 x=ss{1}; end
                if size(v,3)==length(ss{1})-1 z=ss{1}; end
                if size(v,1)==length(ss{2})-1 y=ss{2}; end
                if size(v,2)==length(ss{2})-1 x=ss{2}; end
                if size(v,3)==length(ss{2})-1 z=ss{2}; end
                if size(v,1)==length(ss{3})-1 y=ss{3}; end
                if size(v,2)==length(ss{3})-1 x=ss{3}; end
                if size(v,3)==length(ss{3})-1 z=ss{3}; end
                % test ob x,y,z jetzt existieren
                if (exist('x') & exist('y') & exist('z'))
                    % keine fehlerausgabe
                    fehler=0;
                end
            end
        end
    end
end

if (fehler==0)
    % Test ob Mittelpunkt oder Bl鯿ke
    if (size(z,2)==size(v,3))
        % Mittelpunkt
        % Test ob x und y richtig in v integriert
        if (size(x,2)==size(v,2) & size(y,2)==size(v,1))
            % alles richtig
        elseif (size(x,2)==size(v,1) & size(y,2)==size(v,2))
            % x und y vertauscht
            v=permute(v,[2 1 3]);
        else
            % ansonsten fehler
            fehler=1;
        end
    elseif (size(z,2)==size(v,3)+1)
        % Bl鯿ke
        % Test ob x und y richtig in v integriert
        if (size(x,2)==size(v,2)+1 & size(y,2)==size(v,1)+1)
            % Bl鯿ke erstellen
            [x,y,z,v]=v3d_import_block(x,y,z,v);
        elseif (size(x,2)==size(v,1)+1 & size(y,2)==size(v,2)+1)
            % x und y vertauscht
            v=permute(v,[2 1 3]);
            % Bl鯿ke erstellen
            [x,y,z,v]=v3d_import_block(x,y,z,v);
        else
            % ansonsten fehler
            fehler=1;
        end
    else
        % ansonsten fehler
        fehler=1;    
    end
end


% wenn Fehlerflag aktiviert
if fehler==1
    % Fehlermeldung - Infodialog welches Format verlangt wird
    dlg=errordlg(...
        {'Es werden genau 4 Datens鋞ze ben鰐igt:', ...
        '', ...
        'x - Vektor x-Achse (min. 2 bzw. 3 Elemente)', ...
        'y - Vektor y-Achse (min. 2 bzw. 3 Elemente)', ...
        'z - Vektor z-Achse (min. 2 bzw. 3 Elemente)', ...
        'v - Matrix (y * x * v) bzw. f黵 Blockkoordinaten Matrix (y-1 * x-1 * z-1)'}, ...
        'Fehler');
    waitfor(dlg);

    % nichts zur點kgeben
    x=0; y=0; z=0; v=0;
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -