# Draw ellipse in image

435 views (last 30 days)

Show older comments

I would like to draw an ellipse (black-filled) in a white canvas given the center coordinates of the ellipse.

For rectangle, I did it this way (need to fill the rectangle) but for ellipse it seems to be more difficult.

width = 300;

objectWidth = 60;

canvas = ones(width, width);

figure, imshow (canvas);

square = rectangle('Position', [60-objectWidth/2, 40-objectWidth/2, objectWidth, objectWidth], ...

'EdgeColor', [0.5 0.5 0.2]);

I was thinking of the following formula for the ellipse:

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

Any hints would be great. Btw. Happy New Year!

##### 0 Comments

### Accepted Answer

Image Analyst
on 2 Jan 2017

Also see my attached demos.

##### 2 Comments

Image Analyst
on 2 Jan 2017

### More Answers (1)

KSSV
on 2 Jan 2017

clc; clear all ;

% An ellipse can be defined as the locus of all points that satisfy the equations

% x = a cos t

% y = b sin t

% where:

% x,y are the coordinates of any point on the ellipse,

% a, b are the radius on the x and y axes respectively,

t = linspace(0,2*pi) ;

a = 30 ; b = 15 ;

x = a*cos(t) ;

y = b*sin(t) ;

plot(x,y,'r')

axis equal

##### 3 Comments

Jiawei Xu
on 8 Jun 2021

Just adding to the answer to KSSV: To tilt the ellipse, you can multiply the points with a rotation matrix generated with the function:

function R = Rot2D(angle)

R = [cos(angle), -sin(angle);

sin(angle), cos(angle)];

end

such that

R = Rot2D(angle);

XY_rotated = R*[x;y];

plot(x,y,'r')

We do not know the `angle` here, but if you have the long radius and short radius available to you in vector form, such as

a = [1;5];

b = [-2,0.4];

you can find this angle by applying

angle = atan2(a(2), a(1));

### See Also

### Community Treasure Hunt

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

Start Hunting!