Matlab: 3D Plot in kartesischem Koordinatensystem

3D Grid/Gitter

(English) In diesem Post stell ich mein 3D-Gitter für Matlab vor. Dieses erzeugt in Abhängigkeit verschiedener Parameter ein Gitter in Matlab. Dieses kann einfach genutzt werden, um Vektoren, Ebenen und Geraden im dreidimensionalen Darzustellen.

function grid3D(x2,x,y2,y,z2,z,amountx,amounty,amountz,arrowtrue);

dabei gibt x2,y2,z2 die Startwerte der Achse und x,y,z die Endwerte der Achse an. Die anderen Variablen sind optional. Dabei gibt amountx, amounty, amountz die Anzahl der Achsenunterteilungen an. Wenn "arrowtrue = 1" ist, dann werden Pfeile an die Achsen gezeichnet. Diese sind jedoch nur für symmetrische Gitter gut zu gebrauchen.

Hier der Quellcode:
 function grid3D(x2,x,y2,y,z2,z,amountx,amounty,amountz,arrowtrue);

if nargin<7
    amountx = 4;
    amounty = 4;
    amountz = 4;
end
if nargin<10
    arrowtrue = 0;
end

xrange = x2-x;
yrange = y2-y;
zrange = z-z2;

zq = 0:1:amountz;
yq = 0:1:amounty;
xq = 0:1:amountx;

hold on;
set(gca,'visible','off')

xv1=x*ones(amountx+1,1)+(xq*xrange/amountx)';
yv1=y*ones(amounty+1,1)+(yq*yrange/amounty)';
zv1=z*ones(amountz+1,1)-(zq*zrange/amountz)';
if (nargin>6)
    view(3);
    %x1x2 Ebene.  
    plot3([-x2 -x],[0 0],[zv1 zv1],'Color',[0.8 0.8 0.8]);
    plot3([0 0],[-y2 -y],[zv1 zv1],'Color',[0.8 0.8 0.8]);
    %x1x3 Ebene.  
    plot3([-xv1 -xv1],[0 0],[z2 z],'Color',[0.8 0.8 0.8]);
    plot3([-xv1 -xv1],[-y2 -y],[0 0],'Color',[0.8 0.8 0.8]);
    %x2x3 Ebene.  
    plot3([0 0],[-yv1 -yv1],[z2 z],'Color',[0.8 0.8 0.8]);
    plot3([-x2 -x],[-yv1 -yv1],[0 0],'Color',[0.8 0.8 0.8]);
end;

%texte
text(-x,-y/10,-z/20,'x_1')
text(-x/20,-y,-z/10,'x_2')
text(-x/10,y/20,z,'x_3')

xv1(sum((xv1==0),2)>0,:)=[];
yv1(sum((yv1==0),2)>0,:)=[];
zv1(sum((zv1==0),2)>0,:)=[];
%Values
text(-xv1,  zeros(numel(xv1),1),  z/12*ones(numel(xv1),1),num2cell(round(xv1*100)/100));
text(zeros(numel(yv1),1),  -yv1, z/15*ones(numel(yv1),1),  num2cell(round(yv1*100)/100));
text(x/15*ones(numel(zv1),1),  y/15*ones(numel(zv1),1),  zv1,num2cell(round(zv1*100)/100));

xrange=-xrange
yrange=-yrange
dx = xrange/15;
dy = yrange/15;
dz = zrange/15;

%arrows
if arrowtrue == 1
    thickx=(yrange+zrange)/(2*xrange);
    thicky=(xrange+zrange)/(2*yrange);
    thickz=(yrange+xrange)/(2*zrange);
    arrow3D(x,0,0,x+dx,0,0,1,1*thickx,'k')
    arrow3D(0,y,0,0,y+dy,0,1,1*thicky,'k')
    arrow3D(0,0,z,0,0,z+dz,1,1*thickz,'k')
end
%axis
view(3);
plot3([-x2 -x],[0 0],[0 0],'k');
plot3([0 0],[-y2 -y],[0 0],'k');
plot3([0 0],[0 0],[z2 z],'k');


xlim([-(x+dx) -x2]);
ylim([-(y+dy) -y2]);
zlim([z2 z+dz]);

Kommentare

Beliebte Posts aus diesem Blog

Matlab: Polarplot Achsenbeschriftungs- und Skalierfunktion

Matlab: GUI Interface