How can I shade the area between a curve and a vertical line?
3 views (last 30 days)
Show older comments
I am going to shade the area between the right side of vertical line and the curve as bellow. Could someone help me? I have attached the code as well.
m=60;L=1;J=60;g=9.81;Time_Delay=0.2;beta2=411.67;
%%
syms w
% W=[0.0001:0.1:18*pi];
W=[0.00001:0.1:3*pi];
% time=[0:0.1:1];
%%
omega=w;
tau=Time_Delay;
Kp1=(J*omega^2 + L*g*m)*cos(omega*tau)/(J*beta2);
Kd1=(J*omega^2 + L*g*m)*sin(omega*tau)/(J*beta2*omega);
%%
figure('DefaultAxesFontSize',10,'DefaultAxesFontName','Times')
D_Curve_PD_KP1=eval(subs(Kp1,w,W));
D_Curve_PD_KD1=eval(subs(Kd1,w,W));
%%
plot(D_Curve_PD_KP1,D_Curve_PD_KD1,'color',[1 0 0.75],'LineWidth', 2)
xlabel ('Kp','FontSize',11, 'FontName', 'Times')
ylabel ('Kd','FontSize',11, 'FontName', 'Times')
axis([0,0.05,0,0.025]);
title('TT', 'FontName', 'Times','FontSize',11)
grid on
hold on
%% Line
plot([0.02385 0.02383],[0 0.025],'color',[0 0 0.75],'LineWidth', 2)
Accepted Answer
Star Strider
on 18 Jul 2021
Try this —
m=60;L=1;J=60;g=9.81;Time_Delay=0.2;beta2=411.67;
%%
% syms w
% W=[0.0001:0.1:18*pi];
% W=[0.00001:1E-4:3*pi];
W = linspace(1E-5, 3*pi, 1000);
% time=[0:0.1:1];
%%
omega=W;
tau=Time_Delay;
Kp1 = @(omega) (J*omega.^2 + L*g*m).*cos(omega*tau)/(J*beta2);
Kd1 = @(omega) (J*omega.^2 + L*g*m).*sin(omega*tau)./(J*beta2*omega);
%%
figure('DefaultAxesFontSize',10,'DefaultAxesFontName','Times')
% D_Curve_PD_KP1=eval(subs(Kp1,w,W));
% D_Curve_PD_KD1=eval(subs(Kd1,w,W));
D_Curve_PD_KP1 = Kp1(omega);
D_Curve_PD_KD1 = Kd1(omega);
%%
figure
mv = D_Curve_PD_KP1 > 0.02383;
patch(D_Curve_PD_KP1(mv), D_Curve_PD_KD1(mv), 'g', 'EdgeColor','none')
hold on
plot(D_Curve_PD_KP1,D_Curve_PD_KD1,'color',[1 0 0.75],'LineWidth', 2)
xlabel ('Kp','FontSize',11, 'FontName', 'Times')
ylabel ('Kd','FontSize',11, 'FontName', 'Times')
axis([0,0.05,0,0.025]);
title('TT', 'FontName', 'Times','FontSize',11)
grid on
%% Line
plot([0.02385 0.02383],[0 0.025],'color',[0 0 0.75],'LineWidth', 2)
hold off
The patch call can be a bit of a challenge, since it also involves creating the logical vector ‘mv’ (mask vector). Beyond that, I eliminated the Symbolic Math Toolbox invocation, recoding ‘Kd1’ and ‘Kp1’ as anonymous functions. (See the documentation section on Anonymous Functions if you are not familiar with them.) I rearranged the plot calls so that the patch will plot first. The curve and line plots then plot over it.
.
2 Comments
More Answers (1)
Alan Stevens
on 18 Jul 2021
Edited: Alan Stevens
on 18 Jul 2021
Try
help fill
or
help patch
Although they refer to polygons, you could easily represent your curve as a multi-segment polygon.
0 Comments
See Also
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!