Draw ellipse in image
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!
Accepted Answer
More Answers (2)
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
Hossein Sahhaf
on 29 Feb 2020
Very well. Brief and complete.
Frank Uhlig
on 18 May 2020
So, this draws an ellipse that has major axes parallel to the coordinate axes and has center at the origin ... . How about a general lay for the axes? and a general lay for the center point?
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));
sashidhar
on 16 Nov 2022
0 votes
clc
clear all
t=linspace(0,2*pi);
a=input('Enter the xcoordinate of the ellipse: ');
b=input('Enter the ycoordinate of the ellipse: ');
x=a*cos(t);
y=b*sin(t);
plot(x,y)
axis equal
Categories
Find more on Image Arithmetic in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!