2016-06-17 3 views
1

私は次の図を持っています。ここでは2つのサーフェスをプロットし、両方の交点を示したかったのです。2本の線の間のサーフェスを計算する

zdiff = z1-z2; 
C = contours(x,y,zdiff,[0 0]); 
xL = C(1, 2:end); 
yL = C(2, 2:end); 
zL = interp2(x, y, z1, xL, yL); 
line(xL, yL, zL, 'Color', 'k', 'LineWidth', 2,'Linestyle','--'); hold on; 
line(xL, yL, zeros(size(zL)), 'Color', 'k', 'LineWidth', 2); hold off; 

さて、私はプロット実際の交差点(破線)との間に垂直面とXY(実線)を介して投影したいが、私は理解することはできません。これを行うには、私は次のようにやりましたどうやってするか。何か案は?

Intersection of both surfaces

+0

あなたが表面の値を計算しますかを、または表面を描きたいですか? – BerndGit

+0

実際には、表面を描く –

答えて

2

もう本当に簡単オプションベクター:

dist = (diff(xL).^2+diff(yL).^2).^0.5; %distance between x,y 
cdist = [0, cumsum(dist)]; %cumsum of the distance 
area = trapz(cdist,zL); %The area 
+0

エレガント。 'diff'コマンドに気づかせてくれてありがとう。 – BerndGit

+0

申し訳ありませんが、私は表面を描くことを意味しました。 –

0

なぜそれを手動で計算していませんか? (未テスト)のような

何か:それはトリックを行う可能性がありますoneliner

Area = 0 
for i=1:numel(xL)-1 
    base = sqrt( (xL(i)-xL(i+1))^2 + (yL(i)-yL(i+1))^2); 
    Area =Area + base * (zL(i) + zL(i+1))/2; 
end; 
0

多分かなりが、そのAではありません。このコードは(1、N)のためであるとして、多分あなたは形式を調整する必要が

xL=(1:100); %size 1 100 
    yL=(1:100) ;%size 1 100 
    zL=rand(1,100);%size 1 100 

    line(xL,yL,zL) 
    line(xL,yL,zeros(size(zL))) 
    hold on 
    surf(repmat(xL,100,1),repmat(yL,100,1),cell2mat(arrayfun(@(x,y) linspace(x,y,100)',zL,zeros(size(zL)),'UniformOutput',false))) 
0
xL=sin((1:30)/10); % Data generation for test only. Use your data 
yL=cos((1:30)/10); % Data generation for test only. Use your data 
zL=2+xL.*yL;  % Data generation for test only. Use your data 
surf([xL;xL],[yL;yL],[zeros(size(zL));zL]); % plot the surface 
関連する問題