Boundary line for contour

12 Ansichten (letzte 30 Tage)
Pooyan Jafari
Pooyan Jafari am 29 Nov. 2020
Bearbeitet: Star Strider am 1 Dez. 2020
Hello,
I want to draw a boundary line for my contour
you can see my contour (without bondary) and a contour with boundary (desired)
you can see my contour (without bondary)
here is my code:
clc,clear,close all;
% syms z y ;
B = 10;
H = 5;
C = 10;
L1 = 1;
Ri = B/2 + L1;
Rf = C + B/2 + L1;
y = linspace(-25,0,1000);
z = linspace(0,28,1000);
[Z,Y] = meshgrid(z,y);
r1 = sqrt((Y.^2)+(Z.^2));
r = abs(sqrt((Y.^2)+(Z.^2)) - Rf);
beta = asin( Z ./ sqrt((Y.^2)+(Z.^2)) );
beta(1000,1) = 0;
Rbeta = Ri + (2.*beta.*(Rf-Ri)./pi);
Rt0 = B/2+L1;
Rmaxtb = (Rt0.*Rbeta)./Ri;
Vmbeta = (2*(pi^2)*((B+(2*L1))^2)) ./ ((((2*L1*pi)+(pi*B)+(4.*beta.*C)).^2));
% Calculate the distance for condition
Rt00 = (B/2-L1);
Rmaxtbb = (Rt00.*Rbeta)./Ri;
% End
for i = 1:1:1000
for j = 1:1:1000
if r(i,j)>Rbeta(i,j) | r1(i,j)>(Rf+Rmaxtbb(i,j))
Vbeta(i,j)=0;
else
Vbeta(i,j) = Vmbeta(i,j) * (1 - ((r(i,j)^2) / (Rmaxtb(i,j)^2)));
end
end
end
ZZ = Z./B;
YY = Y./B;
contourf(ZZ,YY,Vbeta,100,'edgecolor','none')
colormap( flipud(gray(256)) )
colorbar
xlabel('z/D')
ylabel('y/D')
any help is appreciated

Akzeptierte Antwort

Star Strider
Star Strider am 29 Nov. 2020
Sometimes, a bit of absolute creativity (‘thinking outside the contour) is necessary.
I first did a meshc plot of your matrices to see what the ‘Vbeta’ matrix looked like in 3D. It has a sllight elevation with steep transitions at the edges. That led to experiments using the gradient function to calculate numerical derivatives of the ‘Vbeta’ matrix, and that led to this result (with code previous to this not copied here):
ZZ = Z./B;
YY = Y./B;
contourf(ZZ,YY,Vbeta,100,'edgecolor','none')
colormap( flipud(gray(256)) )
colorbar
xlabel('z/D')
ylabel('y/D')
[~,dY] = gradient(Vbeta);
hold on
contour(ZZ.*(dY~=0),YY.*(dY~=0),ones(size(dY)).*(dY~=0), [0 1], '--k')
hold off
producing this plot:
I have no idea how robust this approach would be to similar plots, however it appears to work here. It uses a second contour call and logical indexing (of a sort) to ptroduce the necessary contours.
  3 Kommentare
Star Strider
Star Strider am 1 Dez. 2020
Bearbeitet: Star Strider am 1 Dez. 2020
My pleasure!
Experiment with the caxis function to create the color axis range (herre the intensity of the gray colormap) that you want.
Example —
ZZ = Z./B;
YY = Y./B;
contourf(ZZ,YY,Vr,100,'edgecolor','none')
colormap( flipud(gray(256)) )
lim = caxis;
caxis(lim.*[1.50 0.50]) % Limits The Color Axis Range
colorbar
xlabel('z/D')
ylabel('y/D')
[~,dY] = gradient(Vr);
hold on
contour(ZZ.*(dY~=0),YY.*(dY~=0),ones(size(dY)).*(dY~=0), [0 1], '--k')
hold off
Here, I multiplied the lower limit by 1.5 and the upper limit by 0.5 to decrease the range. Experiment with them to get the result you want.
EDIT — (1 Dec 2020 at 00:32)
Added new plot image —
.
.
Star Strider
Star Strider am 1 Dez. 2020
If my Answer helped you solve your problem, please Accept it!
.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Contour Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by