55 views (last 30 days)

Matt J
on 30 Jun 2020

Edited: Matt J
on 30 Jun 2020

You can use trustregprob from the File Exchange

For example, consider the following ellipse and external point y,

A=[2 1;1,2]; %Ellipse equation matrix

y=[1;0.5]; %External point

z=[0.584808315593597 ; 0.201052451754066]; %Closest point

ellipsefun=@(p,q) sum([p;q].*(A*[p;q]))-1 ;

hold on

fimplicit(ellipsefun, [-1 1.3 -1 1.3])

plot(y(1),y(2),'rx',z(1),z(2),'bo');

axis equal

hold off

I found the closest point z using the code below,

Aroot=chol(A);

L=Aroot\eye(2);

z=Aroot\trustregprob(L.'*L, L.'*y,1);

and the minimum distance is just,

>> distance=norm(z-y)

distance =

0.5116

Bruno Luong
on 7 Jul 2020 at 5:50

In the FEX I post bellow there are 2 functions that convert between ellipse parametric explicit eqauation to quadratic implicit equation used by Matt.

Read the H1 line of those functions to get a flavor, and read what it does exactly in their body. The math behind is quadratic form.

Bruno Luong
on 8 Jul 2020 at 9:16

FEX short word for File Exchange. Click on it I put the link on my message.

H1: https://www.mathworks.com/help/matlab/matlab_prog/add-help-for-your-program.html

Image Analyst
on 4 Jul 2020

"The oual can be both given in the form of an equation or data points." <== if you have data points (xb, yb) on the boundary of an ellipse/oval, you can use sqrt() to find the distances to some other point (xp, yp). Then use in() to find the minimum distance.

distances = sqrt(xb-xp).^2 + (yb-yp).^2);

minDistance = min(distances)

If you have an image then you need to get the boundary points first:

boundaries = bwboundaries(binaryImageOfEllipse);

boundaries = boundaries{1}; % Extract double array from cell array.

xb = boundaries(:, 2);

yb = boundaries(:, 1);

Image Analyst
on 18 Jul 2020 at 13:58

No, you shouldn't use an inner loop because your minDistance will just be the distance between (x1,y1) and xwoint(Num2) and ywoint(Num2) instead of the whole array. Do it like this:

clc;

clear all;

A = xlsread('data1.xlsx');

xpoint=A(:,1);

ypoint=A(:,2);

Num1=length(xpoint);

xwoint=A(:,3);

ywoint=A(:,4);

Num2=length(xwoint);

for k=1:1:Num1

x1 = xpoint(k);

y1 = ypoint(k);

distances = sqrt((xwoint-x1).^2 + (ywoint-y1).^2);

minDistance(k) = min(distances)*1000;

end

plot(minDistance, 'b-');

% xlswrite('thick.xlsx',minDistance,'sheet1');

Not sure why you wanted to multiply by 1000 though.

Opportunities for recent engineering grads.

Apply Today
## 3 Comments

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/555925-does-anyone-know-how-to-use-the-matlab-to-calculate-the-minimu-distance-between-a-point-outside-oval#comment_915991

⋮## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/555925-does-anyone-know-how-to-use-the-matlab-to-calculate-the-minimu-distance-between-a-point-outside-oval#comment_915991

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/555925-does-anyone-know-how-to-use-the-matlab-to-calculate-the-minimu-distance-between-a-point-outside-oval#comment_916024

⋮## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/555925-does-anyone-know-how-to-use-the-matlab-to-calculate-the-minimu-distance-between-a-point-outside-oval#comment_916024

## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/555925-does-anyone-know-how-to-use-the-matlab-to-calculate-the-minimu-distance-between-a-point-outside-oval#comment_918157

⋮## Direct link to this comment

https://es.mathworks.com/matlabcentral/answers/555925-does-anyone-know-how-to-use-the-matlab-to-calculate-the-minimu-distance-between-a-point-outside-oval#comment_918157

Sign in to comment.