2016-07-13 11 views
1

関数z = f(x、y)を考えると、x、y、zの任意の切断平面に沿って(1D)線プロットを作成することに興味があります。 Matlabでこれをどうやって行うのですか?たとえば、スライスは高次元のバージョン(密度データのカラーマップ)を提供しますが、これは私が探しているものではありません。サーフェスプロットのスライスを作成して線を作成するにはどうすればよいですか? (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私は法線ベクトルが常にxy平面にある切断平面に興味があります。つまり、x、yの任意の方向にカットするが、常に垂直になるプレーンです。 – ConfusinglyCuriousTheThird

答えて

3

サーフェスをスライスしたいプレーンの法線ベクトルが常にxy平面内にある場合、サーフェス上のスライスラインにあるx、y座標に沿ってデータを補間できます。たとえば、

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); 

(50,35)面がポイント・ツー・ポイント(0,15)から行くように定義させ、それは平面であるので、Xを得ることは比較的容易であり、Yスライシング面の座標をlinspaceに合わせると、100点を得て、100点を元のデータに補間します。今、私たちは、zの値を持っていることを

% 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

関連する問題