2016-07-17 2 views
2

J'ai essayé de modifier le code de manière à ce que seule la première zone soit grisée. Comment puis-je définir la ligne horizontale d'une manière qui n'apparaît que sous la zone que je veux ombrer?Ombrer et calculer la zone spécifique

En outre, je veux calculer la superficie d'une région. Comment puis-je y parvenir? Je sais que c'est trapz mais je ne suis pas sûr de savoir comment définir les limites. Merci!

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

Répondre

3

vous pouvez aussi essayer cette option simple:

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 

sans définir des domaines d'intérêt un prieuré: Filling area

Et ne pas oublier de hold off. ..

Pour calauler la zone: A = trapz(x(lineStart:lineEnd),y(lineStart:lineEnd))

+0

Merci pour vos efforts mec! Une question. Que veut dire 1 dans 'lineStart = find (y> = niveau, 1);' – MatlabNewb

+0

Cela signifie 'chercher la première fois que la condition est vraie', donc il donne seulement la première augmentation de 'y' au dessus du niveau – EBH

2

Vous pouvez limiter la portée de votre axe x dans la parcelle area à la plage d'intérêt, par exemple de 0 à 4, puis calculez les valeurs résultantes de la fonction dans cette plage. Pour la ligne de base: vous pouvez la masquer dans la commande area et l'ajouter manuellement à l'aide de la commande 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

Merci beaucoup! :) Comment puis-je savoir calculer l'aire de la surface donnée. Assez sûr que c'est trapz mais je ne suis pas sûr des limites. Si je n'ai pas de points donnés explicitement, je dois probablement utiliser l'intersection. Des idées de votre côté? – MatlabNewb

+0

@Detox: vous avez raison. J'ai raté cette partie de votre question. Espérons que cela aide: https://de.mathworks.com/matlabcentral/answers/15653-evaluating-the-area-between-two-curves –

+0

Merci! Une dernière question. Si je veux ombrer une autre zone en dessous de mon ombré dans l'image, mais il est dans le secteur inférieur, la zone remplira également le secteur entre les deux lignes. Comment puis-je éviter une telle occurrence? – MatlabNewb