Asked by Dimitris Arapidis
on 8 Sep 2013

I want to plot an Ellipse. I have the verticles for the major axis: d1(0,0.8736) d2(85.8024,1.2157) (The coordinates are taken from another part of code so the ellipse must be on the first quadrant of the x-y axis) I also want to be able to change the eccentricity of the ellipse.

Answer by Roger Stafford
on 8 Sep 2013

Edited by Cris LaPierre
on 5 Apr 2019

Accepted Answer

Let (x1,y1) and (x2,y2) be the coordinates of the two vertices of the ellipse's major axis, and let e be its eccentricity.

a = 1/2*sqrt((x2-x1)^2+(y2-y1)^2);

b = a*sqrt(1-e^2);

t = linspace(0,2*pi);

X = a*cos(t);

Y = b*sin(t);

w = atan2(y2-y1,x2-x1);

x = (x1+x2)/2 + X*cos(w) - Y*sin(w);

y = (y1+y2)/2 + X*sin(w) + Y*cos(w);

plot(x,y,'y-')

axis equal

Walter Roberson
on 26 Jul 2018

Kaleesh Bala
on 27 Jul 2018

ok fine let me put it in parametric type having two foci as x1 y1, x2 y2

determining r1,r2 to get the elliptical form? I think from r1 can get r2.

So how to determine r1.

xt = r1 * cos(t) + xc;

yt = r2 * sin(t) + yc;

Walter Roberson
on 27 Jul 2018

The foci are not enough information to determine the ellipse.

Sign in to comment.

Answer by Azzi Abdelmalek
on 8 Sep 2013

Edited by Azzi Abdelmalek
on 12 Jun 2015

a=5; % horizontal radius

b=10; % vertical radius

x0=0; % x0,y0 ellipse centre coordinates

y0=0;

t=-pi:0.01:pi;

x=x0+a*cos(t);

y=y0+b*sin(t);

plot(x,y)

Ivailo Ivanov
on 14 Jan 2016

It was very simple and comprehensible.

Cynthia Dickerson
on 27 Jun 2018

Thanks! This code worked for me perfectly. :)

Sign in to comment.

Answer by Kate
on 24 Feb 2014

Roger Stafford
on 24 Feb 2014

That involves more work, Kate. I'll show you a first, easy step and let you struggle through the rest.

It requires a minimum of five points to uniquely determine a conic section - that is, an ellipse, a parabola, or a hyperbola. One way to approach the problem is to find a set of values A, B, C, D, E, and F such that

A*x^2 + B*x*y + C*y^2 + D*x + E*y + F

is as close to zero as possible for the points (assuming the six constants have been normalized by having the sum of their squares be unity.) With five points it should be essentially zero for each of the points. For more points, it depends on how close they all are to a valid conic section. If they actually lie on some conic, then with the appropriate constants A, B, etc., the above would also be zero at each point.

These constants can be found using matlab's 'svd' singular value decomposition function. Let x be a column vector of all the points' x-coordinates and y a column vector of their corresponding y-coordinates. Do this:

[U,S,V] = svd([x.^2,x.*y,y.^2,x,y,ones(size(x))]);

Then the desired constants will be in the vector V(:,6), namely, A = V(1,6), B = V(2,6), C = V(3,6), D = V(4,6), E = V(5,6), and F = V(6,6). These are associated with the smallest singular value in S. If that value is zero, then there is a precise match with all points.

Probably the easiest way to proceed from here on in plotting the conic section, would be to solve for y as a function of x, (or possibly x as a function of y,) in the quadratic equation

A*x^2 + B*x*y + C*y^2 + D*x + E*y + F = 0

The type of conic section is determined by the discriminant, B^2-4*A*C. If it is negative, the curve is an ellipse, if it is zero, the curve is a parabola, and if it is positive, it is a hyperbola. Recalling high school algebra, there will in general be two y solutions or none for each x, (and two x solutions or none for each y,) using the famous quadratic formula.

Making a successful plot would require a determination of the range of x (or of y) for which there are solutions and then generating a set of x values (or y values,) maybe with linspace, and making two separate plots of the two possible solutions for y (or for x).

Another approach to handling such a quadratic equation involves making the appropriate translation and rotations so as to place the equation in a standard form from which plots can readily be made. This, however, probably involves more effort than the above, though it is more informative.

Image Analyst
on 25 Feb 2014

Devi Satya Cheerla
on 12 Jun 2015

in the equation of ellipse X2/a2 + Y2/b2 = 1. knowing the points on ellipse, can find a and b. then enter the code below to mathematically compute y and to plot x,y.

code:

x=(0:.01:a); # x value is from 0 to 'a' and discrete with 0.01 scale#

i=1:(a*100+1); # i is to calculate y at every discrete value. it should be for 1 i.e first x value to the last x value.. as it does not have a zero, add 1#

clear y # to clear any previous y value#

for i=1:(a*100+1)

y(i)=(b^2*(1-(x(i)^2)/a^2))^.5; #from the ellipse equation y=sqrt(b2(1-(x2/a2))#

end

plot(x,y)

hold on

plot(x,-y)

hold on

plot(-x,y)

hold on

plot(-x,-y)

Sign in to comment.

Answer by Omar Maaroof
on 13 May 2019

you can use

Ellipse2d

Walter Roberson
on 13 May 2019

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## muhammad arfan (view profile)

Direct link to this comment:https://de.mathworks.com/matlabcentral/answers/86615-how-to-plot-an-ellipse#comment_715864

Sign in to comment.