use patch to plot hexahedron with 20 nodes
    5 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    alize beemiel
 il 13 Nov 2020
  
    
    
    
    
    Commentato: alize beemiel
 il 13 Nov 2020
            hi
i have a hexaedron with 20 nodes  
i have coordonates X Y Z  
and the conectivity    [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];
and the stress value of  all nodes  TZ 
  TZ=[ -0.0225
   -0.0226
   -0.0233
   -0.0185
   -0.0188
   -0.0144
   -0.0144
   -0.0141
   -0.0062
   -0.0064
         0
         0
         0
   -0.0209
   -0.0216
   -0.0126
   -0.0123
         0
         0
   -0.0137]
how can i use patch to plot my hexaedon  and take all nodes  to make interpolation  for facecolor ith TZ
i use this 
patch('Faces',Rectangles,'Vertices',[Vertice(:,1) Vertice(:,2) Vertice(:,3)],'FaceVertexCData',TZ,'FaceColor','interp','Marker','.');
vertice is X Y Z for the hexaedron 
TZ is color face 
but when i come to determine rectangle  or the point to make faces i have problem
i wante to use all points of hexaedre

i do this but it deasnt work
   Bricks =[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];
     Rectangles=[];
    Rectangles=[Rectangles ; [Bricks(:,1)  Bricks(:,2)  Bricks(:,3)  Bricks(:,4)  Bricks(:,5)  Bricks(:,6)  Bricks(:,7)  Bricks(:,8)]];
    Rectangles=[Rectangles ; [Bricks(:,13) Bricks(:,14) Bricks(:,15) Bricks(:,16) Bricks(:,17) Bricks(:,18) Bricks(:,19) Bricks(:,20)]];
    Rectangles=[Rectangles ; [Bricks(:,1)  Bricks(:,2)  Bricks(:,3)  Bricks(:,10) Bricks(:,15) Bricks(:,14) Bricks(:,13) Bricks(:,9)]];
    Rectangles=[Rectangles ; [Bricks(:,3)  Bricks(:,4)  Bricks(:,5)  Bricks(:,11) Bricks(:,17) Bricks(:,16) Bricks(:,15) Bricks(:,10)]];
    Rectangles=[Rectangles ; [Bricks(:,5)  Bricks(:,6)  Bricks(:,7)  Bricks(:,12) Bricks(:,19) Bricks(:,18) Bricks(:,17) Bricks(:,11)]];
    Rectangles=[Rectangles ; [Bricks(:,7)  Bricks(:,8)  Bricks(:,1)  Bricks(:,9)  Bricks(:,13) Bricks(:,20) Bricks(:,19) Bricks(:,12)]]; 
some one tell me use rectangle and take just the point of a corner  but it give me a wrong resultat 
thank you for any help
2 Commenti
  Mario Malic
      
 il 13 Nov 2020
				Try to create patch for only one face, once you manage to do it, work your way towards patching all the faces. 
Risposta accettata
  Bruno Luong
      
      
 il 13 Nov 2020
        
      Modificato: Bruno Luong
      
      
 il 13 Nov 2020
  
      Here we go
[x,y,z]=ndgrid(0:2);
xyz = [x(:) y(:) z(:)];
xyz(sum(xyz==1,2)>1,:)=[];
x=xyz(:,1);y=xyz(:,2);z=xyz(:,3);
a=atan2(z-1.001,x-1);
[~,is]=sortrows([y -a]);
xyz=xyz(is,:);
F = zeros(6,8);
i = 0;
for c=1:3
    for v=[0 2]
        r = find(xyz(:,c)==v);
        st = xyz(r,:);
        st(:,c) = [];
        st = (st-[1 1]);
        a = sign(v-1)*atan2(st(:,2),st(:,1));
        [~,is] = sort(a);
        i = i+1;
        F(i,:) = r(is);
    end
end
xyz = xyz/2;
% Create a dummy Stress
%Stress = 2-sqrt(sum((xyz-rand(1,3)).^2,2));
  TZ=[ -0.0225
   -0.0226
   -0.0233
   -0.0185
   -0.0188
   -0.0144
   -0.0144
   -0.0141
   -0.0062
   -0.0064
         0
         0
         0
   -0.0209
   -0.0216
   -0.0126
   -0.0123
         0
         0
   -0.0137];
Stress = abs(TZ);
StressNorm = (Stress-min(Stress))/(max(Stress)-min(Stress));
close all
figure
clmap = jet;
StressColor = interp1(linspace(0,1,size(clmap,1)),clmap,StressNorm,'nearest','extrap');
patch('Faces',F,'Vertices',xyz,'FaceVertexCData',StressColor,'FaceColor','interp');
hold on
%scatter3(xyz(:,1),xyz(:,2),xyz(:,3));
set(gca,'Xtick',[],'Ytick',[],'Ztick',[])
for k=1:size(xyz,1)
    text(xyz(k,1),xyz(k,2),xyz(k,3),num2str(k));
end
xlabel('x');
ylabel('y');
zlabel('z');
view(3)
axis('equal');

Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Polygons in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


