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

📄 plot_structure.m

📁 matlab实例
💻 M
字号:
%*****************************************************************
% function plot_structure
%
% plot out structure, loads and constraints
%*****************************************************************
function plot_structure(Geom,BCs,solution_vector)

% pad coord data for 1D plotting
if length( Geom.Nodes(1).coord ) == 1
  for inod = 1:Geom.nnodes
    Geom.Nodes(inod).coord(2) = 0;
  end
end

% plot original elements

clf                % clear current plot window
axis equal

%Nodes_e = [Geom.Nodes( Geom.ElemData(iel).connect(:) )];
%coor = [Geom.Nodes( Geom.ElemData(iel).connect(:) ).coord]

for iel = 1:Geom.nelems
  elemType = Geom.ElemData(iel).elemType;
  nnodes   = Geom.ElemType(elemType).nnodes;
  for inod = 1:nnodes
    X_e(inod) = Geom.Nodes( Geom.ElemData(iel).connect(inod) ).coord(1);
    Y_e(inod) = Geom.Nodes( Geom.ElemData(iel).connect(inod) ).coord(2);
  end
  patch(X_e, Y_e, 'b','Edgecolor','b','FaceColor','none')
end

if ~isempty(solution_vector)
    if Geom.ndofs_node == 1  % colinear spring elements
        for inod = 1:Geom.nnodes;
            coordnew(inod,:) = Geom.Nodes(inod).coord;
        end
        title_string = Geom.title;
    else               % determine scaling for displaced nodes
        maxdisp = max(abs(solution_vector));
        axissize = axis;
        scale_factor = (axissize(2) - axissize(1))/maxdisp*0.03;
        
        % create new displaced scaled nodal positions
        for inod = 1:Geom.nnodes
            coordnew(inod,1) = Geom.Nodes(inod).coord(1) + ...
                solution_vector( Geom.ndofs_node*(inod-1) + 1 )*scale_factor;
            coordnew(inod,2) = Geom.Nodes(inod).coord(2) +...
                solution_vector( Geom.ndofs_node*(inod-1) + 2 )*scale_factor;
        end
        
        % plot displaced elements
        for iel = 1:Geom.nelems
            patch( coordnew(Geom.ElemData(iel).connect(:), 1),...
                coordnew(Geom.ElemData(iel).connect(:), 2),...
                [0 0.75 1],'LineStyle',':','FaceAlpha',0.1,'Edgecolor','b')
        end
        title_string = strcat(Geom.title,'; [deflection scale factor: ',...
            num2str(scale_factor),']');
    end
else
   for inod = 1:Geom.nnodes;
      coordnew(inod,:) = Geom.Nodes(inod).coord;
   end
   title_string = Geom.title;
end

% display element numbers
for iel = 1:Geom.nelems
  meanx = mean(coordnew( Geom.ElemData(iel).connect(:), 1));
  meany = mean(coordnew( Geom.ElemData(iel).connect(:), 2));
  text(meanx, meany, int2str(iel),'color','r');
end

% display node numbers
axissize = axis;    % determine offsets for numbering
dx = (axissize(2) - axissize(1))/60;
for inod = 1:Geom.nnodes
  text(coordnew(inod,1) + dx,coordnew(inod,2) - dx, int2str(inod),'color','k');
end

% show constraint symbols
hold on            % hold current graph or it disappears with plot command
for ic = 1:BCs.nnodeConstraint 
    nodenum = BCs.NodeConstraint(ic).nodeID;
    p = [0 -1.5 -1.5; 0 0.7 -0.7];
    if BCs.NodeConstraint(ic).dof == 2 % i.e. y direction
        p = flipud(p);
    end
    patch(p(1,:)*dx+coordnew(nodenum,1),p(2,:)*dx+coordnew(nodenum,2),...
        'm','EdgeColor','m','FaceColor','none')
end

% show load symbols
for il = 1:BCs.npointLoads
    loadnum = BCs.PointLoad(il).nodeID;
    p(1,:)=abs((BCs.PointLoad(il).value<0)*5 - [5 3.8 3.8]); 
    p(2,:) = [0 0.6 -0.6];
    if BCs.PointLoad(il).dof == 1 % lines in x direction
        line([coordnew(loadnum,1) + 5*dx coordnew(loadnum,1)], ...
            [coordnew(loadnum,2)        coordnew(loadnum,2)],'color','m')
    else                  % line in y direction
        line([coordnew(loadnum,1)        coordnew(loadnum,1)], ...
            [coordnew(loadnum,2) + 5*dx coordnew(loadnum,2)],'color','m')
        p(2,:) = -p(2,:);
        p = flipud(p);
    end
    patch(p(1,:)*dx+coordnew(loadnum,1),p(2,:)*dx+coordnew(loadnum,2),...
        'm','EdgeColor','m','FaceColor','m')
end

title(title_string)

⌨️ 快捷键说明

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