MATLAB Answers


Colouring Tetramesh - Element wise

Asked by ADSW121365 on 21 Oct 2019 at 9:38
Latest activity Commented on by ADSW121365 on 22 Oct 2019 at 8:34
I'm working with tetrahedral finite elements. I can happily set up a mesh and work with said mesh. A really simple example code then gives the following with 72 elements:
clear,close all; clc; dbstop if error;
Nx = 4; Ny =3; Nz = 3; %No. Nodes Nx*Ny Ny = odd
%Variables to create Mesh:
a = 1; b = 1; c = 2;
X = linspace(0,a,Nx); Y = linspace(0,c,Ny); Z = linspace(0,a,Nz);
[X,Y,Z] = meshgrid(X,Y,Z); X = X(:); Y = Y(:); Z=Z(:);
TRI = delaunay(X,Y,Z);
N = [X,Y,Z]; %Node Coordinates Vector
%figure; triplot(TRI,X,Y);
figure; tetramesh(TRI,[X(:),Y(:),Z(:)]), xlabel('x'),ylabel('y'),zlabel('z');
As a part of my model, each individual element is assumed to be homogoenous and as such has a material property associated with it which for the example here is given by:
NE = size(TRI,1); %Number of Elements
Elements = 1:NE;
Rho_e = zeros(NE,1);
Rho_e(Elements(sum(Y(TRI) <= b,2)==3)) = rho;
When I'm working with triangles in 2D. I can make use of trisurf and create a plot of the material properties:
Nx = 13; Ny =13; %No. Nodes
%Variables to create Mesh:
a = 1; b = 1; c = 2;
X = linspace(0,a,Nx); Y = linspace(0,c,Ny);
[X,Y] = meshgrid(X,Y); X = X(:); Y = Y(:);
TRI = delaunay(X,Y); %Simple Mesh
I'm currently trying then to create this plot for a 3D mesh of delauney tetrahedra as set up in the previous code. My current attempt looks like:
axis equal; colorbar; xlim([0,a]); ylim([0,c]); zlim([0,a]);
Which results in the following error message:
Warning: Error creating or updating Patch
Error in value of property FaceVertexCData
Number of colors must equal number of vertices
> In defaulterrorcallback (line 12)
In Oct8_3DFEM (line 56)
My guess is that I somehow need to manipulate my Rho vector from reprsenting individual elements to individual vertices. However for physical purposes it is important I find Rho_e first. The final image I'm searching for will essentially be a 3D projection of the 2D one attached above. Any thoughts, advice or other suggestions would be greatly appreciated

  1 Comment

ADSW121365 on 22 Oct 2019 at 8:34
tetramesh(TRI,[X Y Z],Rho_e);
Using this syntax, I get the following figure:
The error message then arises when I try to set it to interpolate the colours
tetramesh(TRI,[X Y Z],Rho_e,'facecolor','interp');
which I assume means this is a syntax error.

Sign in to comment.

1 Answer

Answer by darova
on 21 Oct 2019 at 10:34

Manipulate with faceVertexCData property if you want to assing some colors
FaceVertexCData = [ (72 by 1) double array]
Vertices = [ (169 by 3) double array]
p1 = tetramesh(TRI,[X,Y,Z]);


ADSW121365 on 22 Oct 2019 at 7:38
Thanks for the answer, this method does work however it isn't ideal. Compare the tetramesh result (with which I can't set the colours):
To the result from patch with specified colours:
Whilst patch achieves the same purpose, the figure from tetramesh is significantly nicer and represents a much better visualisation for my purposes. If anyone has any further suggestions to allow me to make use of tetramesh it would be most appreciated.
on 22 Oct 2019 at 8:15
patch painted faces/surfaces in colors you set. Why it doesn't work?
ADSW121365 on 22 Oct 2019 at 8:25
It does work in producing the image I'm interested in, just not as nicely as the tetramesh function
The difference being tetramesh plots the whole tetrahedron as a single solid element with transparency automatically chosen to be able to see all the elements, whilst patch seems to construct a series of solid 2D shapes to represent the tetrahedra.

Sign in to comment.