使用Matlab trisurf绘制元素数量

时间:2014-07-04 12:12:54

标签: matlab matlab-figure finite-element-analysis

通常,trisurf用于绘制三角形网格上的节点数量。但是,我想使用以下命令绘制一些元素数量。

trisurf(t,p(:,1),p(:,2),elewise_quantity,'edgecolor','k','facecolor','interp');

其中elewise_quantiy应与p(:,1)或p(:,2)具有相同的维度,因此我通过将元素数量与该元素的每个节点相关联来创建elewise_quantity。

在这种特定情况下,中间的8个三角形元素与1相关联,所有其他元素都是0值。有10 * 10个小方块和10 * 10 * 2个小三角形。

问题是,如图所示,trisurf无法产生我想要的效果。我所期望的是“精确的元素描述”,即边缘处的急剧过渡

另外请注意,在每个角落,显示效果都不同,这是由于三角形的具体方向,是否有优雅的处理方式?


enter image description here

2 个答案:

答案 0 :(得分:1)

如果您需要跨元素的明显不连续性,我建议不要显示节点值。计算内部积分点处的元素值(例如,质心处的元素平均值)并将该值分配给元素。要求Matlab根据其质心或积分点值为每个元素着色。

答案 1 :(得分:0)

您可以使用此方法设置每个三角形颜色:

%// Example data
X = rand(100,1);
Y = rand(100,1);
Z = X+Y;
T = delaunay(X,Y);
C = mean(Z(T),2);

%// Plot the data
hh = trisurf(T,X,Y,Z);
set(gca, 'CLim', [min(C), max(C)]);
set(hh,'FaceColor', 'flat', ...
       'FaceVertexCData', C, ...
       'CDataMapping', 'scaled');

如果您也不希望看到边界处出现的三角形,则只需一次调用trimesh即可获得此行为。您需要计算每个三角形的数量,然后根据每个三角形的数量删除您不想绘制的数量。