如何创建曲面图以创建线? (Matlab的)

时间:2016-07-13 03:33:07

标签: matlab plot matlab-figure

给定一些函数z = f(x,y),我有兴趣沿x,y,z中的任意切割平面创建(1D)线图。我如何在Matlab中执行此操作?例如,切片提供了更高维度的版本(密度数据的颜色图),但这不是我正在寻找的。

E.g:

z = peaks(50);
surf(z);
%->plot z along some defined plane in x,y,z...

以前曾经问过,例如here,但这是给出的答案是将3D数据减少为2D数据,谷歌搜索没有明显的答案。感谢。

1 个答案:

答案 0 :(得分:3)

如果要切割曲面的平面的法线向量将始终位于xy平面中,则可以沿着切片线中的x,y坐标在曲面上插入数据,例如,let平面定义为从点(0,15)到点(50,35)

enter image description here

% Create Data
z=peaks(50);

% Create x,y coordinates of the data
[x,y]=meshgrid(1:50);

% Plot Data and the slicing plane 
surf(z);
hold on
patch([0,0,50,50],[15,15,35,35],[10,-10,-10,10],'w','FaceAlpha',0.7);

% Plot an arbitrary origin axis for the slicing plane, this will be relevant later
plot3([0,0],[15,15],[-10,10],'r','linewidth',3);

由于它是一个平面,相对容易获得x,y坐标使用linspace对齐切片平面,我将获得100个点,然后将这100个点插入到原始数据中。

% Create x and y over the slicing plane
xq=linspace(0,50,100);
yq=linspace(15,35,100);

% Interpolate over the surface
zq=interp2(x,y,z,xq,yq); 

既然我们有z的值,我们需要反对它们的绘制对象,那就是你需要为拼接平面定义任意原点轴的地方,为了方便起见我在(0,15)定义了它,然后计算每个x,y对与该轴的距离,然后我们可以将获得的z与该距离进行绘图。

dq=sqrt((xq-0).^2 + (yq-15).^2);

plot(dq,zq)

axis([min(dq),max(dq),-10,10]) % to mantain a good perspective

enter image description here