使用quiver
,streamslice
或类似方法在MATLAB中绘制流线时,是否可以在给定的轮廓水平上提取轮廓线?
举个例子(我的情况下有数字数据,但我会在示例中使用分析函数):
[X,Y] = meshgrid(0:.02:1);
Z = X.*exp(-X.^2 - Y.^2);
[DX,DY] = gradient(Z,.2,.2);
figure
imagesc([0 1], [0 1], Z)
hold on
streamslice(X,Y,DX,DY) %how to extract a trajectory at a given contour level C?
hold off
colorbar
如果没有,是否有可能获得它们?我正在考虑以这种方式使用contour
,
contour(X,Y,sqrt(DX.*DX+DY.*DY), [1 1]*0.07)
但是当我与上面的简化比较时,这显然是错误的。
答案 0 :(得分:1)
hs = streamslice(X,Y,DX,DY);
作为结果,您获得了一个带有轨迹线句柄的矢量。例如,您可以获取第一个轨迹线的坐标:
N_trajects = length(hs); % the number of all trajectories
n = 1; % the chosen trajectory
X_traject = get(hs(n),'XData');
Y_traject = get(hs(n),'YData');
或使用新版本的MATLAB:
X_traject = hs(n).XData;
Y_traject = hs(n).YData;
提取countour行数据:
C = contour(X,Y,sqrt(DX.*DX+DY.*DY), [1 1]*0.07);
其中C
使用轮廓线来计算数据。在您的情况下,只有一条轮廓线(X_contour = C(1,:)
,Y_contour = C(2,:)
)。对于许多轮廓级别,要提取它们,请参阅here或here或使用this。
现在我们知道轨迹和轮廓水平的坐标。因此,您可以找到轨迹与轮廓水平之间的交点。