How to plot ellipse using contour function?

19 ビュー (過去 30 日間)
Abdullah
Abdullah 2023 年 3 月 7 日
コメント済み: Abdullah 2023 年 3 月 15 日
i would like to plot ellipse using contour function, since it is easier to label curves or lines than plot function , but it does not show the expected lines, the lines should be narrowed towards left and not towards right
%If_dmax is an array (1*201)
%[X,Y] = meshgrid(linspace(-1000,1000,201),linspace(-1000,1000,201));
for k1 = 1:(length(If_dmax))
[C,fContour] = contour(X,Y,sqrt((L_d.*X+L_df*If_dmax(k1)).^2+(L_q.*Y).^2),'ShowText','on', 'LineWidth', 0.5,'EdgeColor',[0 0 1]);
%fContour.LevelStep=0.05;
end
  8 件のコメント
Torsten
Torsten 2023 年 3 月 13 日
t = 0:0.01:2*pi;
a = [1;2];
b = [2;4];
x = a*cos(t);
y = b*sin(t);
plot(x.',y.')
Abdullah
Abdullah 2023 年 3 月 13 日
but i wanted as in the title of post, using "contour" function

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

回答 (1 件)

John D'Errico
John D'Errico 2023 年 3 月 13 日
編集済み: John D'Errico 2023 年 3 月 13 日
I'm a little confused. You DID draw ellipses. It seems the goal was not to draw the ellipses you drew though. Essentially, as you did it, you drew ellipses of the form:
(x/a)^2 + (y/b)^2 = R
where R varies, but a was fixed. That is how contour would work, and you were triyng to use contour to solve your prolem. I imagine you saw someone using contour to draw ellipses online somewhere. It may even have been me who showed that trick.
But from your comment, you seem to be asking how to draw ellipses where a varies in the espression
(x/a)^2 + (y/b)^2 = 1
Essentially, that will cause each ellipse to be wider or narrower in the x-direction. Possibly then, a better method is to just use polar coordinates. For example, I'll choose to vary a in that expression, where b is fixed at 1.
b = 1;
theta = linspace(0,2*pi)';
a = 0.25:0.25:2;
x = zeros(size(theta))*a;
% note that I could have done this without using a loop at all, but that
% may have been too much to understand how it works.
for i = 1:numel(a)
x(:,i) = a(i)*cos(theta);
y(:,i) = b*sin(theta);
end
plot(x,y)
legend(string(a))
  4 件のコメント
Abdullah
Abdullah 2023 年 3 月 15 日
Thank you very much, your code helped me further
anyhow, i am still wondering why i am not able to get the expected lines.
do you find any difference between these codes of the resulted two figures?
figure(1)
a = 0.25:.25:2;
b = 0.25:.5:4;
[X,Y] = meshgrid(linspace(-5,5,500),linspace(-2,2,500));
for ind = 1:numel(a)
[C,fContour] = contour(X,Y,sqrt((X./a(ind)).^2 + (Y/b(ind)).^2),'ShowText','on', 'LineWidth', 0.5,'EdgeColor',[0 0 1]);
hold on
fContour.LevelList=a(ind);
end
axis equal
figure(2)
th = linspace(0,2*pi,201)' ;
for ind = 1:numel(a)
%xe = I_ch((k1))+a(k1).*cos(th) ;
xe = a(ind).*cos(th) ;
ye = b(ind).*sin(th) ;
h2=plot(xe, ye,'--b');
grid on;
hold on
end
Abdullah
Abdullah 2023 年 3 月 15 日
i found where the bug was,
'1' was missed in the ellipse equation, so it should be like this
[C,fContour] = contour(X,Y,sqrt(((X-I_ch(ind))./a(ind)).^2 + (Y/b(ind)).^2)-1,'ShowText','on', 'LineWidth', 0.5,'EdgeColor',[0 0 1]);

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

カテゴリ

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by