Draw ellipse in image
25 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Image Analyst
2017-1-2
Also see my attached demos.
2 个评论
Image Analyst
2017-1-2
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?
更多回答(2 个)
KSSV
2017-1-2
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 个评论
Frank Uhlig
2020-5-18
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
2021-6-8
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
2022-11-16
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
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!