% 定义主应力范围 s1 = linspace(-50, 50, 100); s2 = linspace(-50, 50, 100); s3 = linspace(-50, 50, 100); % 创建网格 [S1, S2, S3] = meshgrid(s1, s2, s3); % 计算Mises和Drucker屈服函数 mises = sqrt(0.5 * ((S1 - S2).^2 + (S2 - S3).^2 + (S3 - S1).^2))-20; % drucker = sqrt(3/2) * sqrt(((S1 - S2).^2 + (S2 - S3).^2 + (S3 - S1).^2) + 6*(S1.^2+S2.^2+S3.^2))-6.*(S1+S2+S3)/3; % 绘制Mises屈服面 % figure; isoVal = 3; isosurface(S1, S2, S3, mises, 5); % 绘制Mises屈服面 % fv.FaceColor = 'w'; % % fv.EdgeColor = 'b'; % daspect([1,1,1]) % view(3) % % % % p = patch(fv); % % reducepatch(p,0.1) % % set(p, 'FaceColor', 'g'); % % axis equal; % % reduceRatio = 0.5; % % [fvr, vr] = reducepatch(fv.faces, fv.vertices, reduceRatio); % % % % % 绘制四边形网格 % % figure % % patch('Faces',fvr,'Vertices',vr,'FaceColor','r','EdgeColor','g'); % % axis equal % view(3); % set(s,'FaceColor',[0.5 1 0.5]); % set(s,'EdgeColor','none'); camlight; lighting gouraud; xlabel('s1'); ylabel('s2'); zlabel('s3'); title('Mises屈服面'); % 增加网格 grid on; % hold on % % 绘制Drucker屈服面 % % figure; % isosurface(S1, S2, S3, drucker, 1); % 绘制Drucker屈服面 % xlabel('s1'); % ylabel('s2'); % zlabel('s3'); % title('Drucker屈服面')这段代码增加使用mesh划分功能
时间: 2023-11-26 21:05:39 浏览: 115
可以使用mesh函数将三维空间划分为网格,然后计算每个网格点的Mises和Drucker屈服函数值,最后绘制出屈服面。代码如下:
```matlab
% 定义主应力范围
s1 = linspace(-50, 50, 100);
s2 = linspace(-50, 50, 100);
s3 = linspace(-50, 50, 100);
% 创建网格
[S1, S2, S3] = meshgrid(s1, s2, s3);
% 计算Mises和Drucker屈服函数
mises = sqrt(0.5 * ((S1 - S2).^2 + (S2 - S3).^2 + (S3 - S1).^2))-20;
drucker = sqrt(3/2) * sqrt(((S1 - S2).^2 + (S2 - S3).^2 + (S3 - S1).^2) + 6*(S1.^2+S2.^2+S3.^2))-6.*(S1+S2+S3)/3;
% 绘制Mises屈服面
figure;
isoVal = 3;
fv = isosurface(S1, S2, S3, mises, isoVal);
p = reducepatch(fv, 0.1); % 使用reducepatch函数降低面片数量,加快绘制速度
patch(p, 'FaceColor', 'g', 'EdgeColor', 'none');
xlabel('s1');
ylabel('s2');
zlabel('s3');
title('Mises屈服面');
grid on;
hold on;
% 绘制Drucker屈服面
fv = isosurface(S1, S2, S3, drucker, 1);
p = reducepatch(fv, 0.1);
patch(p, 'FaceColor', 'r', 'EdgeColor', 'none');
xlabel('s1');
ylabel('s2');
zlabel('s3');
title('Mises和Drucker屈服面');
grid on;
```
在上述代码中,我们使用 meshgrid 函数将三个主应力的范围划分为网格,然后计算每个网格点的 Mises 和 Drucker 屈服函数值。接着,我们使用 isosurface 函数绘制出 Mises 和 Drucker 的屈服面,并使用 reducepatch 函数降低面片数量,加快绘制速度。最后,我们增加了 xlabel、ylabel、zlabel、title 和 grid 等设置,使图像更加美观。
阅读全文