2016-07-13 3 views
1

Учитывая некоторую функцию z = f (x, y), меня интересует создание (1D) линейного графика вдоль произвольной плоскости резки по x, y, z. Как это сделать в Matlab? Например, Slice предоставляет версию с более высокой размерностью (colormap данных плотности), но это не то, что я ищу.Как создать срез участка поверхности для создания линии? (Matlab)

т.д .:

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

Это было предложено до, например, here, но это ответ, который предназначен для уменьшения 3D-данных для 2D-данных, и нет очевидного ответа на поисковый запрос. Благодарю.

+0

Пара вопросов. Будет ли ваша определенная плоскость параллельна оси z или имеет ли она полные 3 степени свободы во вращении? И как бы вы определили ось x в вашем графике вывода? –

+0

@NoelSegura Меня интересует плоскость резания, нормальный вектор которой всегда находится в плоскости ху. То есть плоскость, разрезающая в любом направлении x, y, но всегда вертикальная. – ConfusinglyCuriousTheThird

ответ

3

Если нормальный вектор плоскости, на которой вы хотите срезать свою поверхность, всегда будет располагаться в плоскости xy, тогда вы можете интерполировать данные по вашей поверхности вдоль координат x, y, которые находятся в линии резки, например, пусть плоскость определяется как переход от точки (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); 

так как плоскость, относительно легко получить х, у координаты alogn плоскости среза с 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); 

Теперь, когда мы имеем значение г, нам нужно против того, чтобы построить их против, вот где вам нужно определить произвольную ось происхождения для сращивания плоскости, я определил мину при (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

Смежные вопросы