[C,h] = contour(X, Y, trc(X, Y), [1 1]); % w = h.LineWidth; h.LineWidth = 2; h.LineStyle = "-."; h.EdgeColor = "r"; h.FaceColor = "r"; 给绘制的曲线增加三角形标识
时间: 2024-03-14 14:48:26 浏览: 66
你可以使用 plot 函数来在指定位置处绘制三角形标识。具体步骤如下:
1. 获取 contour 函数返回的曲线坐标点。
2. 在指定位置处,使用 plot 函数绘制三角形标识。
3. 设置三角形标识的样式,例如填充颜色和边框颜色等。
下面是代码示例:
```
% 绘制等值线
[C,h] = contour(X, Y, trc(X, Y), [1 1]);
% 设置等值线样式
h.LineWidth = 2;
h.LineStyle = "-.";
h.EdgeColor = "r";
h.FaceColor = "r";
% 获取曲线坐标点
xdata = h.XData;
ydata = h.YData;
% 在指定位置处绘制三角形标识
x = xdata(1); % 指定位置的 x 坐标
y = ydata(1); % 指定位置的 y 坐标
plot(x, y, '>', 'MarkerSize', 10, 'MarkerFaceColor', 'r', 'MarkerEdgeColor', 'w');
```
其中,`xdata(1)` 和 `ydata(1)` 表示曲线上的第一个点,你可以根据实际情况选择其他点。`MarkerSize` 参数控制三角形标识的大小,`MarkerFaceColor` 和 `MarkerEdgeColor` 分别设置填充颜色和边框颜色。
相关问题
MATLAB 程序yieldstress = 333.8624; %% Drucker-Prager parameter a1 = -0.1039; %% 坐标轴范围 limitxy = 500; %% vmc = @(x, y) sqrt(x.^2 - x.*y + y.^2)-yieldstress.*(1+a1*(-sqrt(3)/3)); % trc = @(x, y) 0.5 * max(cat(3, abs(x - y), abs(x), abs(y))-1, [], 3); xx = linspace(-limitxy, limitxy, 1000); yy = linspace(-limitxy, limitxy, 1000); [X, Y] = ndgrid(xx, yy); [C,h] = contour(X, Y, vmc(X, Y), [1 1]); % xlim([-limitxy, limitxy]); % ylim([-limitxy, limitxy]); w = h.LineWidth; h.LineWidth = 1; % h.LineStyle = ":"; h.EdgeColor = "b"; h.FaceColor = "r";,设定yieldstress为矩阵,并将程序简化
抱歉,您的代码中将 yieldstress 定义为标量而非矩阵。以下是将程序简化后的代码:
yieldstress = 333.8624;
a1 = -0.1039;
limitxy = 500;
vmc = @(x, y) sqrt(x.^2 - x.*y + y.^2) - yieldstress.*(1+a1*(-sqrt(3)/3));
xx = linspace(-limitxy, limitxy, 1000);
yy = linspace(-limitxy, limitxy, 1000);
[X, Y] = ndgrid(xx, yy);
[C, h] = contour(X, Y, vmc(X, Y), [1 1]);
h.LineWidth = 1;
h.EdgeColor = "b";
h.FaceColor = "r";
% xlim([-limitxy, limitxy]);
% ylim([-limitxy, limitxy]);
%% Drucker-Prager 参数 a=-0.1039; %% Modified Drucker-Prager 参数 a1=0.9954; a2=0.0046; a3=-5.65469; %% 二维Mises vmc = @(x, y) sqrt(x.^2 - x.y + y.^2)-1; %% 二维 Tresca trc = @(x, y) 0.5 * max(cat(3, abs(x - y), abs(x), abs(y))-1, [], 3); %% Drucker-Prager和Modified Drucker-Prager DruPra = @(x, y) sqrt(x.^2 - x.y + y.^2)(1+a(x+y)/2/ sqrt(x.^2 - x.*y + y.^2))-1; xx = linspace(-6, 6, 1000); yy = linspace(-6, 6, 1000); [X, Y] = ndgrid(xx, yy);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% contour(X, Y, vmc(X, Y), [1 1]) hold on contour(X, Y, trc(X, Y), [1 1]); hold on contour(X, Y, DruPra(X, Y), [1 1]); hold on % contour(X, Y, ModiDruPra(X, Y), [1 1]); title('Mises Yield Surface in 2D Principal Stress Space'); hold on,,给这段程序改成有求解容差的程序
可以将程序改写为以下形式,增加了一个函数 `DruPra_f` 用于计算 Drucker-Prager 函数值,同时在调用 `fminsearch` 函数时添加了选项 `options`,其中设定了求解容差。
```
% Drucker-Prager 参数
a = -0.1039;
% Modified Drucker-Prager 参数
a1 = 0.9954;
a2 = 0.0046;
a3 = -5.65469;
% 二维Mises
vmc = @(x, y) sqrt(x.^2 - x.*y + y.^2) - 1;
% 二维 Tresca
trc = @(x, y) 0.5 * max(cat(3, abs(x - y), abs(x), abs(y)) - 1, [], 3);
% Drucker-Prager函数
DruPra_f = @(x, y) sqrt(x.^2 - x.*y + y.^2) .* (1 + a * (x + y) / 2 / sqrt(x.^2 - x.*y + y.^2)) - 1;
% 设定求解容差
options = optimset('TolFun', 1e-6, 'TolX', 1e-6);
% 生成坐标网格
xx = linspace(-6, 6, 1000);
yy = linspace(-6, 6, 1000);
[X, Y] = ndgrid(xx, yy);
% 绘制等值线图
contour(X, Y, vmc(X, Y), [1 1])
hold on
contour(X, Y, trc(X, Y), [1 1])
hold on
contour(X, Y, DruPra(X, Y), [1 1])
hold on
% contour(X, Y, ModiDruPra(X, Y), [1 1]);
title('Mises Yield Surface in 2D Principal Stress Space')
hold on
% 求解 Drucker-Prager 函数值
x0 = [0, 0];
fminsearch(@(x) DruPra_f(x(1), x(2)), x0, options);
```
注意,在 `DruPra_f` 函数的定义中,需要将 `x.y` 改为 `x.*y`,否则会出现错误。
阅读全文