给定一些函数z = f(x,y),我有兴趣沿x,y,z中的任意切割平面创建(1D)线图。我如何在Matlab中执行此操作?例如,切片提供了更高维度的版本(密度数据的颜色图),但这不是我正在寻找的。 p>
E.g:
z = peaks(50);
surf(z);
%->plot z along some defined plane in x,y,z...
以前曾经问过,例如here,但这是给出的答案是将3D数据减少为2D数据,谷歌搜索没有明显的答案。感谢。
答案 0 :(得分:3)
如果要切割曲面的平面的法线向量将始终位于xy平面中,则可以沿着切片线中的x,y坐标在曲面上插入数据,例如,let平面定义为从点(0,15)到点(50,35)
% 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