2016-09-14 92 views
2

使用quiver,streamslice或类似的方法在MATLAB中绘制流线时,是否可以在给定轮廓线上提取轮廓线?从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

hs = streamslice(X,Y,DX,DY);因为你得到一个带有处理线的矢量。例如,你可以得到第一traject线的坐标:

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

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

+0

谢谢,这很有帮助。但是,是否有可能找到特定轮廓水平的轨迹? – BillyJean

+0

现在与您的问题有关吗? –

+0

是的,谢谢亚历山大 – BillyJean