有限元 - 在三角形网格中绘制应力
Finite Element - Plotting with stresses in triangle mesh
我正在编写程序,我需要绘制一些被分割成许多三角形的区域。我计算了每个节点/三角形每个角的应变。现在我需要用应变绘制三角形。
现在我有了三种绘制三角形的方法。但是在其中一个中,我用它的角应变的平均值填充每个三角形。我想做的是...
将应变放在角上,得到一个看起来像 contour 或 contourf 的图。 - 我真的不明白它们是如何工作的。
谁能帮帮我?
clear; clc;
TC = [ 1 2 3 ; 2 3 4 ] ; % Triangles node Connection.
NC = [ 0,0 ; 0,1 ; 1,0 ; 1,1 ] ; % Node Coordinates.
strain = [ 300 , 400 , 500 ; 400 , 500 , 600]; % Strains in each node.;
[ne,np] = size(TC); % Just finding how many elements.
element = zeros([3 2 ne]); % Creating a matrix for each element.
% My first and second plot...
for i=1:ne
no1 = TC(i,1); no2 = TC(i,2); no3 = TC(i,3);
element(:,:,i) = [ NC(no1,1),NC(no1,2);
NC(no2,1),NC(no2,2);
NC(no3,1),NC(no3,2);]; % Defining each element for each loop.
% Node 1 Node 2 Node 3
xe = [element(1,1,i),element(2,1,i),element(3,1,i)]; % Defining coordinates to plot.
ye = [element(1,2,i),element(2,2,i),element(3,2,i)];
subplot(3,1,1)
plot([xe, xe(1)],[ye, ye(1)]) % ATTEMPT ONE % Only plotting the triangles. Using first value also last to close the triangle.
xlim([-1 2]); ylim([-1 2])
hold on
subplot(3,1,2)
fill(xe,ye,mean(strain(i,:))) % ATTEMPT TWO % Fill triangles with average strain.
hold on
xlim([-1 2]); ylim([-1 2])
end
% ATTEMPT 3
subplot(3,1,3)
TR = triangulation(TC,NC);
triplot(TR)
hold on
xlim([-1 2]); ylim([-1 2])
提前致谢。
您可以使用fill
函数来获得您想要的阴影。通过对您的应用程序进行一些自定义,我相信下面的代码会起作用,但如果 for
循环使您的程序减慢太多,则可能需要进行一些矢量化处理。
X = zeros(3,size(TC,1));
Y = zeros(3,size(TC,1));
C = zeros(3,size(TC,1));
for i = 1:size(TC,1) % for all triangle connection definitions
for j = 1:3 % for all nodes in a triangle
X(j,i) = NC(TC(i,j),1)'; % format X points
Y(j,i) = NC(TC(i,j),2)'; % format Y points
C(:,i) = strain(i,:)'; % format color based on strain value
end
end
fill(X,Y,C)
结果:
You may want to check this documentation for further details on how X,Y and C are interpreted
我正在编写程序,我需要绘制一些被分割成许多三角形的区域。我计算了每个节点/三角形每个角的应变。现在我需要用应变绘制三角形。
现在我有了三种绘制三角形的方法。但是在其中一个中,我用它的角应变的平均值填充每个三角形。我想做的是... 将应变放在角上,得到一个看起来像 contour 或 contourf 的图。 - 我真的不明白它们是如何工作的。
谁能帮帮我?
clear; clc;
TC = [ 1 2 3 ; 2 3 4 ] ; % Triangles node Connection.
NC = [ 0,0 ; 0,1 ; 1,0 ; 1,1 ] ; % Node Coordinates.
strain = [ 300 , 400 , 500 ; 400 , 500 , 600]; % Strains in each node.;
[ne,np] = size(TC); % Just finding how many elements.
element = zeros([3 2 ne]); % Creating a matrix for each element.
% My first and second plot...
for i=1:ne
no1 = TC(i,1); no2 = TC(i,2); no3 = TC(i,3);
element(:,:,i) = [ NC(no1,1),NC(no1,2);
NC(no2,1),NC(no2,2);
NC(no3,1),NC(no3,2);]; % Defining each element for each loop.
% Node 1 Node 2 Node 3
xe = [element(1,1,i),element(2,1,i),element(3,1,i)]; % Defining coordinates to plot.
ye = [element(1,2,i),element(2,2,i),element(3,2,i)];
subplot(3,1,1)
plot([xe, xe(1)],[ye, ye(1)]) % ATTEMPT ONE % Only plotting the triangles. Using first value also last to close the triangle.
xlim([-1 2]); ylim([-1 2])
hold on
subplot(3,1,2)
fill(xe,ye,mean(strain(i,:))) % ATTEMPT TWO % Fill triangles with average strain.
hold on
xlim([-1 2]); ylim([-1 2])
end
% ATTEMPT 3
subplot(3,1,3)
TR = triangulation(TC,NC);
triplot(TR)
hold on
xlim([-1 2]); ylim([-1 2])
提前致谢。
您可以使用fill
函数来获得您想要的阴影。通过对您的应用程序进行一些自定义,我相信下面的代码会起作用,但如果 for
循环使您的程序减慢太多,则可能需要进行一些矢量化处理。
X = zeros(3,size(TC,1));
Y = zeros(3,size(TC,1));
C = zeros(3,size(TC,1));
for i = 1:size(TC,1) % for all triangle connection definitions
for j = 1:3 % for all nodes in a triangle
X(j,i) = NC(TC(i,j),1)'; % format X points
Y(j,i) = NC(TC(i,j),2)'; % format Y points
C(:,i) = strain(i,:)'; % format color based on strain value
end
end
fill(X,Y,C)
结果:
You may want to check this documentation for further details on how X,Y and C are interpreted