How to interpolate an ellipse given data points?

29 views (last 30 days)
Hi,
I plotted number of concentric ellipses using contour function, where each ellipse represents a flux level which is a function of two currents.
But the matrix which I obatained using contour function contains some x, y coordinates which when plotted gives me an approximate ellipse shape. For example let's say a small ellipse and matlab gives me a diamond shape for it, like in the picure shown
So, my intention is to make all these ellipses more smooth by increasing the number of data points in each ellipse.
I have tried using the code below
and it gives me a weird plots like shown below
image.PNG
I have also removed level,vertices column but still the plot looks weird.
So, is there any way to to get good ellipse shapes, also I should be able to access x and y datapoints after interpolation
Thank you.
  2 Comments
Cris LaPierre
Cris LaPierre on 5 Apr 2019
It is much more preferrable you copy/paste your code rather than include screenshots. Motivation to transcribe code from an image is often pretty low...
You can't interp an ellipse as is because there are 2 y values for most x values. You'd have to reparametize your curves.
John D'Errico
John D'Errico on 5 Apr 2019
DON'T send me direct e-mail to get me to answer your question. Don't send me multiple e-mails, as you actually did. In fact, you had to send me e-mail through my profile, where you should have seen that explicit statement to not send direct e-mail.
I would have answered your question in depth otherwise, as I would have seen it, and found it to be of some interest.

Sign in to comment.

Accepted Answer

Cris LaPierre
Cris LaPierre on 5 Apr 2019
Edited: Cris LaPierre on 5 Apr 2019
The challenge is to get your x to be unique and increasing. If I create a new variable that is the cumulative distance of each point from the first point, that satisfies that condition. I use that as my new x and use it to interp both x and y.
By default, interp1 is linearly adding points between known data points (same slope). To get a more rounded shape, set the interp style to spline.
% https://www.mathworks.com/matlabcentral/answers/86615-how-to-plot-an-ellipse#answer_96122
a=10; % horizontal radius
b=5; % vertical radius
x0=0; % x0,y0 ellipse centre coordinates
y0=0;
t=linspace(-pi,pi,11);
x=x0+a*cos(t);
y=y0+b*sin(t);
plot(x,y)
axis equal
% Now that we have x, y vals, reparameterize and interp.
% Assuming linear interpolation adequately represents the ellipse
dist = sqrt(diff(x).^2+diff(y).^2);
%Reparameterize
tm = cumsum([0 dist]);
t = linspace(0,tm(end));
xInt = interp1(tm,x,t,"spline");
yInt = interp1(tm,y,t,"spline");
hold on
plot(xInt,yInt)

More Answers (0)

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!