2016-07-17 17 views
2

Я попытался изменить код так, чтобы только первая область была затушевана серым цветом. Как установить горизонтальную линию таким образом, чтобы она отображалась только в области, которую я хочу затенять?Тень и вычислить определенную область

Кроме того, я хочу рассчитать площадь ОДНОГО региона. Как мне это достичь? Я знаю, что это trapz, но я не уверен, как установить границы. Благодаря!

x = 0:.01:4*pi; %// x data 
y = sin(x);  %// y data 
level = 0.5;  %// level 
plot(x, y) 
hold on 
area(x, max(y, level), level, 'EdgeColor', 'none', 'FaceColor', [.7 .7 .7]) 

Curve: -
Curve

ответ

3

вы можете попробовать и этот простой вариант:

x = 0:.01:4*pi; %// x data 
y = sin(x);  %// y data 
level = 0.5;  %// level 
lineStart = find(y>=level,1); 
lineEnd = find(y(lineStart:end)<=level,1)+lineStart; 
plot(x,y) 
hold all 
area(x(lineStart:lineEnd),y(lineStart:lineEnd),... 
    level,'EdgeColor', 'none', 'FaceColor', [.7 .7 .7],'ShowBaseLine','off') 
line([x(lineStart),x(lineEnd)],[level level ]) 
hold off 

без определения областей, представляющих интерес а-априорная: Filling area

И не забудьте hold off. ..

Калориметрическое пространство: A = trapz(x(lineStart:lineEnd),y(lineStart:lineEnd))

+0

Спасибо за ваши усилия! Один вопрос. Что означает значение 1 в 'lineStart = find (y> = level, 1);' – MatlabNewb

+0

Это означает «искать первый случай, когда условие истинно», поэтому оно дает только первое увеличение 'y' выше уровня – EBH

2

Вы можете ограничить диапазон вашей оси х в area участке в интересующем диапазоне, например, от 0 до 4, а затем вычислить результирующие значения функции в этом диапазоне. Для базовой линии вы можете скрыть ее в команде area и добавить ее вручную, используя команду line.

x = 0:.01:4*pi; %// x data 
y = sin(x);  %// y data 
level = 0.5;  %// level 
plot(x, y) 
hold on 

x_interest = 0:.01:4; 
y_interest = sin(x_interest); 
area(x_interest, max(y_interest, level), level, ... 
    'EdgeColor', 'none', 'FaceColor', [.7 .7 .7], ... 
    'ShowBaseLine', 'off'); 
line([ min(x_interest) max(x_interest) ], [ level level ]) 

enter image description here

+0

Большое спасибо! :) Как я могу узнать, рассчитать площадь данной поверхности. Довольно уверен, что это ловушка, но я не уверен в границах. Если у меня нет явных указаний, я, вероятно, должен использовать пересечение. Какие-нибудь идеи с вашей стороны? – MatlabNewb

+0

@Detox: вы правы. Я пропустил эту часть вашего вопроса. Надеюсь, это поможет: https://de.mathworks.com/matlabcentral/answers/15653-evaluating-the-area-between-two-curves –

+0

Спасибо! И последний вопрос. Если я хочу затенять другую область ниже моей затененной картинки, но она находится в нижнем секторе, область также заполнит сектор между двумя линиями. Как я могу избежать такого возникновения? – MatlabNewb

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

  • Нет связанных вопросов^_^