2016-06-17 2 views
1

다음 그림에서 두 개의 서페이스를 플롯하고 양쪽 모두의 교차점을 나타내려고했습니다.두 선 사이의 서페이스 계산하기

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

아마 꽤 있지만, 그것 없습니다. 어쩌면 당신이 코드는 (N 1)입니다 같은 벡터 형식을 조정해야

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 
관련 문제