Extract specific X & Y data from Contour curve

38 ビュー (過去 30 日間)
Chinmayraj Doddarajappa
Chinmayraj Doddarajappa 2022 年 8 月 25 日
Hello MATLAB experts,
I have this below contour plot. How can I get the X and Y coordinate data for the specific contour line 1. Either in an array or table format would do the job.
Thanks for looking at it. I have attached the script for the reference.

採用された回答

Star Strider
Star Strider 2022 年 8 月 25 日
Try this —
%% Input Parameters for Earth
Ctheta = 5;
Cphi = 0.001;
phimax = deg2rad(58);
thetamax = deg2rad(45);
alpha = (pi/2)-thetamax;
H1 = hypergeom([2],[3/2,5/2],-thetamax^2);
H2 = hypergeom([2],[1/2,5/2],-thetamax^2);
g = 3.72;
rho = 0.0142;
ge = 9.81;
rhoe = 1.225;
r2 = 0.554;
r3 = 0.59;
Cl = 1.1;
Ct = Cl/sin(2*alpha);
Cd = Cl*tan(alpha);
%% Kolomenskiy Model for Earth Bee
R = 13.2*10^(-3);
c = 4.02*10^-3;
S = 2.*R.*c;
M = 175*10^-6;
mw = 0.2251*R^3;
W = M*g;
%% Kolomenskiy model for Mars Bee
nx = 75;
ny = 75;
Wm_var_out = [];
Klm_out = [];
Kpm_out = [];
Lavg_out =[];
AeroPower_out = [];
PosPinert_out = [];
Iyy_out = [];
N = linspace(1,6,nx);
f = linspace(155,1,ny);
for i = 1:nx
R1 = N(i).*R;
c1 = 0.273.*R1;
mw_var = 0.2251.*R1^3;
Mm_var = M+mw_var;
Wm_var = Mm_var.*g;
Wm_var_out=[Wm_var_out Wm_var];
for j=1:ny
%Average Lift
Klm = rho.*f(j).*(R1.^(2) *r2^(2)).*(2.*R1.*c1).*Ct;
Klm_out = [Klm_out Klm];
Lavg1 = Klm.*sin(2*alpha);
Lavg2 = ((Cphi/(asin(Cphi)))^(2) * (2*pi^(2).*f(j).*phimax^(2))./(1+sqrt(1-Cphi^(2))));
Lavg = Lavg1.*Lavg2;
Lavg_out = [Lavg_out Lavg];
%Average Aerodynamic Power
Kpm = rho.*f(j).*(R1.^(3) *r2^(3)).*(2.*R1.*c1).*(2*Ct);
Kpm_out = [Kpm_out Klm];
% Variation of Flapping Angle
T = 1./f(j);
t =(0:0.00001:T/2);
phi_t = (phimax/asin(Cphi)).*(asin(Cphi.*cos(2*pi.*f(j).*t)));
% Flapping Velocity
phidot_t = (phimax/asin(Cphi)).*((-2*pi.*f(j).*Cphi.*sin(2*pi.*f(j).*t))./sqrt(1-(Cphi^2.*(cos(2*pi.*f(j).*t)).^2)));
% Flapping Acceleration
phi2dot_t = ((4*pi^2 .*f(j).^2 *Cphi *phimax)./asin(Cphi)).*((((Cphi^2.*cos(2*pi.*f(j).*t).*sin(2*pi.*f(j).*t).^2)./(1-(Cphi^2.*cos(2*pi.*f(j).*t).^2)).^(3/2))-(cos(2*pi.*f(j).*t)./sqrt(1-(Cphi^2.*cos(2*pi.*f(j).*t).^2)))));
% Pitching Angle Time variation
theta_t = (thetamax/tanh(Ctheta)).*tanh(Ctheta.*sin(2*pi.*f(j).*t));
% Average Integral Aerodynamic Power
alpha_t = (pi/2)-theta_t;
Kpm = rho.*f(j).*(R1.^3 * r3^3).*(2.*R1.*c1)*(2*Ct);
Pa = phidot_t.^3.*(sin(alpha_t)).^2;
AeroPower = Kpm.*trapz(t,abs(Pa));
AeroPower_out = [AeroPower_out AeroPower];
Pa_I = Kpm.*abs(Pa);
% Inertial Power
Iyy = 0.0426.*R1.^5;
Iyy_out = [Iyy_out Iyy];
Pinert = phidot_t.*Iyy.*phi2dot_t;
B = find(Pinert>=0);
PosPinert = trapz(t(B),Pinert(B))/(T/4);
PosPinert_out = [PosPinert_out PosPinert];
end
end
Ptotal = AeroPower_out+PosPinert_out;
A = reshape(Lavg_out,ny,nx);
C = reshape(Ptotal,ny,nx);
SpecificLift = A./Wm_var_out;
figure
contourf(N,f,SpecificLift,'ShowText','on')
hold on
[M,C] = contourf(N,f,SpecificLift,[1 2 4 6 8 10 12 14 16 18 20],'ShowText','on');
colormap jet
colorbar
title('SF vs Freq vs Specific Lift')
xlabel('Scaling Factor')
ylabel('Frequency')
Levels = C.LevelList
Levels = 1×11
1 2 4 6 8 10 12 14 16 18 20
for k = 1:numel(Levels)
idx = find(M(1,:) == Levels(k));
ValidV = rem(M(2,idx),1) == 0;
StartIdx{k,:} = idx(ValidV);
VLen{k,:} = M(2,StartIdx{k});
end
figure
for k1 = 1:numel(Levels)
% k1 = 4; % Index For Levels 'k1'
hold on
for k2 = 1:numel(StartIdx{k1})
idxv = StartIdx{k1}(k2)+1 : StartIdx{k1}(k2)+VLen{k1}(k2); % Index For Contour 'k1'
xv = M(1,idxv);
yv = M(2,idxv);
plot(xv, yv)
end
end
hold off
hl = legend(compose('%2d',Levels), 'Location','best', 'NumColumns',2);
title(hl, 'Specific Lift')
xlabel('M(1,:)')
ylabel('M(2,:)')
% title(sprintf('Contour Level %.1f', Levels(k1)))
% axis('equal')
.
  2 件のコメント
Chinmayraj Doddarajappa
Chinmayraj Doddarajappa 2022 年 8 月 25 日
Thank you,
Your code is working.
Can you please brief me what the code is doing to get the X and Y coordinated.
Star Strider
Star Strider 2022 年 8 月 25 日
As always, my pleasure!
The ‘xv’ and ‘yv’ values plot the curves for the ‘x’.and ‘y’ values respectively. Subscript them as:
xv{k1,k2} = M(1,idxv);
yv{k1,k2} = M(2,idxv);
where ‘k1’ are the indices of the levels (not the levels themselves), and ‘k2’ are the components of the contours (since in some contour plots, there may be several disconnected contours). For this contour plot, there should be only one (x,y) pair for each contour, so you can customise my code using only ‘k1’ for your contour plot.

サインインしてコメントする。

その他の回答 (1 件)

Matt J
Matt J 2022 年 8 月 25 日
  5 件のコメント
Matt J
Matt J 2022 年 8 月 25 日
Yes, that was what the link was for - the link you said you already downloaded from and tried.
Chinmayraj Doddarajappa
Chinmayraj Doddarajappa 2022 年 8 月 25 日
Thank you, It is working.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeContour Plots についてさらに検索

タグ

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by