Is it possible to change solid fill to lines for patch and set limits to patch?

6 次查看(过去 30 天)
I am trying to fill the area between the z line and v line from from 0 until when they cross at 0.725 and cannot get the function to stop filling the area at that point. Does this require a loop or is there an easier way to do this? I also was wondering if it is possible to change the fill from being a solid fill to just a line pattern going diagonally through the area or if it has to be solid.
clear all
close all
clc
% V ideal
y = 0:10:35000;
x = 0:.01:0.9;
y = 14490 .* log( 1 ./ (1 - x));
% n max
z = 0:1:35000;
b = 0:0.01:0.9;
z = 14490 .* (log( 1 ./ (1 - b)) - ( 0.25 ) .* ( b ./ (1-b)));
% n = 1.1
v = 0:1:35000;
b = 0:0.01:0.9;
v = 14490 .* (log( 1 ./ (1 - b)) - (( 0.9091 ) .* b));
hold on
% All Functions Plotted
plot(x,y,'g');
plot(b,z,'r');
plot(b,v);
% Fill Area
patch([b fliplr(b)],[z fliplr(v)],'b')
% Labeling the Plot
title('\DeltaV vs. m_p/m_0')
xlabel('m_p/m_0')
ylabel('\DeltaV')
label1 = '\DeltaV Ideal';
label2 = '\eta_{max} = 4';
label3 = '\eta = 1.1';
legend(label1,label2,label3,'interpreter','tex')
hold off

回答(1 个)

DGM
DGM 2022-2-26
You should be able to just limit the range used for drawing the patch object
% V ideal
y = 0:10:35000;
x = 0:.01:0.9;
y = 14490 .* log( 1 ./ (1 - x));
% n max
z = 0:1:35000;
b = 0:0.01:0.9;
z = 14490 .* (log( 1 ./ (1 - b)) - ( 0.25 ) .* ( b ./ (1-b)));
% n = 1.1
v = 0:1:35000;
b = 0:0.01:0.9;
v = 14490 .* (log( 1 ./ (1 - b)) - (( 0.9091 ) .* b));
% All Functions Plotted
hold on
plot(x,y,'g');
plot(b,z,'r');
plot(b,v);
% Fill Area
idx = find(b==0.72);
patch([b(1:idx) fliplr(b(1:idx))],[z(1:idx) fliplr(v(1:idx))],'b')
I haven't tried it, but this FEX submission appears to do hatch fills for patch objects:
  2 个评论
DGM
DGM 2022-2-26
I chose the closest defined x-value. b has no value at 0.725. If you want to make sure the patch extends to the intersection, you'll have to insert an extra point (or make sure b and z actually have a point defined at that location).
% Fill Area
idx = find(b==0.72); % the closest x-value not beyond the intersection
xint = 0.724877; % this is still approximate
yint = interp1(b,z,xint);
patch([b(1:idx) xint fliplr(b(1:idx))],[z(1:idx) yint fliplr(v(1:idx))],'b')
I didn't expect the small gap to be an issue if you were to use a hatch fill anyway.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Graphics Performance 的更多信息

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by