Extract specific X & Y data from Contour curve
38 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Chinmayraj Doddarajappa
el 25 de Ag. de 2022
Comentada: Chinmayraj Doddarajappa
el 25 de Ag. de 2022
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.
0 comentarios
Respuesta aceptada
Star Strider
el 25 de Ag. de 2022
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
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 comentarios
Star Strider
el 25 de Ag. de 2022
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.
Ver también
Categorías
Más información sobre Contour Plots en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!