2016-06-17 6 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

Почему бы не его расчета вручную?

Что-то вроде (непроверенные):

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

может быть, не очень, но сво Oneliner это может сделать трюк. может быть, вы должны настроить формат, как этот код для (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 
Смежные вопросы