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!

 Réponse acceptée

Image Analyst
Image Analyst le 2 Jan 2017

2 votes

2 commentaires

Kamu
Kamu le 2 Jan 2017
Modifié(e) : Kamu le 2 Jan 2017
Thanks, your demos were useful to understand the implementation of ellipse better. However, before I try to apply ellipse I still stuck with rectangle. I would like to have a filled rectangle. With 'patch' function it did not work because of the rectangle function.
Image Analyst
Image Analyst le 2 Jan 2017
What values were you using for the 'FaceColor' and 'Edgecolor' properties in rectangle(). I didn't see where you set those. What did you use?

Connectez-vous pour commenter.

Plus de réponses (2)

KSSV
KSSV le 2 Jan 2017

5 votes

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 commentaires

Hossein Sahhaf
Hossein Sahhaf le 29 Fév 2020
Very well. Brief and complete.
Frank Uhlig
Frank Uhlig le 18 Mai 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
Jiawei Xu le 8 Juin 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));

Connectez-vous pour commenter.

sashidhar
sashidhar le 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

Community Treasure Hunt

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

Start Hunting!

Translated by