How to find the vertical height of an ellipse/y axis length of ellipse.

10 views (last 30 days)
How do I get the vertical height/ y axis length on an ellipse if I have values of the centeroid, orientation, major-axis length and minor axis length?

Accepted Answer

Vladimir Sovkov
Vladimir Sovkov on 25 Dec 2019
In fact, the height and the width of an ellipse can be easily and more accurately found analytically. Here is Matlab program realizing such a computation
function h = elhw(ax,bx,q,ifplot)
% Estimates the spans (width and height) of an ellipse
% ax - 1st principal axis halflength
% bx - 2nd principal axis halflength
% q - rotational angle
% ifplot - set it to true if you want to check the result graphically
% h - a vector with the calculated spans (width and height) of the ellipse
%%
st =ax/1000; % sample step for graphical representation; only used with ifplot=true
%
R=[[cos(q),-sin(q)];[sin(q),cos(q)]]; % rotation matrix
D=zeros(2); % ellipse equation in the coordinates of principal axes is [x y] * D^(-1) * [x ; y] = 1
D(1,1)=ax^2;
D(2,2)=bx^2;
DD = R*D*R'; % ellipse equation in the actual coordinates is [x y] * DD^(-1) * [x ; y] = 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% THESE ARE THE VALUES OF INTEREST
h = sqrt(diag(DD));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% check the consistency of the result graphically
if nargin>3 && ~isempty(ifplot) && ifplot(1)
a = max(ax,bx);
xD=(-ax:st:ax);
yD1=sqrt((1-xD.^2/D(1,1))*D(2,2));
yD2=-yD1;
A=R*[xD;yD1];
xDD1 = A(1,:);
yDD1=A(2,:);
A=R*[xD;yD2];
xDD2 = A(1,:);
yDD2=A(2,:);
% figure;
plot(xD,yD1,'--b',xD,yD2,'--b',xDD1,yDD1,'-k',xDD2,yDD2,'-k',[-a a],[-h(2) -h(2)],'-r',[-a a],[h(2) h(2)],'-r',[-h(1) -h(1)],[-a a],'-r',[h(1) h(1)],[-a a],'-r');
legend('non-rotated ellipse','','rotated ellipse','','computed spans');
end
return;
end
And this is the script to check its functionallity
%% define sample parameters randomly and check elwh.m with them
ax=rand; % the 1st axis length
bx=rand; % the 2nd axis length
q=rand*pi; % rotation angle
h = elhw(ax,bx,q,true); % estimate the ellipse width, height, and check the results graphically

More Answers (1)

Image Analyst
Image Analyst on 25 Dec 2019
Does not seem like a MATLAB question. But anyway, if you digitize it into an x array and y array, you can then find the y range of the digitized values.
height = max(y(:)) - min(y(:));
If you don't have any y, then it's just an analytical geometry problem and you should ask it in some general mathematics forum rather than a MATLAB language forum.

Categories

Find more on Computational Geometry in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!