在MATLAB中从流线提取轮廓水平的轨迹

时间:2016-09-14 13:35:49

标签: matlab

使用quiverstreamslice或类似方法在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)

但是当我与上面的简化比较时,这显然是错误的。

1 个答案:

答案 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,:))。对于许多轮廓级别,要提取它们,请参阅herehere或使用this

现在我们知道轨迹和轮廓水平的坐标。因此,您可以找到轨迹与轮廓水平之间的交点。