求一点到圆上最短距离的matlab代码
程序员文章站
2022-04-01 17:25:42
...
function ret = p2curve( a,b,R,m,n )
% -----------------------------
% ------------ret--------------
% xmin ymin:距离最小点的横纵坐标
% dmin: 最小距离
% -----------------------------
% a,b : 圆的形心坐标
% R : 圆的半径
% m,n : 作图点的坐标
% -----------------------------
syms x y u;
c=(x-a)^2+(y-b)^2-R^2;
d=(x-m)^2+(y-n)^2;
h = d+u*c;
dhdx=diff(h,x);
dhdy=diff(h,y);
dhdu=diff(h,u);
sol=solve(dhdx==0,dhdy==0,dhdu==0); %求的是解析解
x=sol.x;
y=sol.y;
u=sol.u;
d1=(x(1)-m)^2+(y(1)-n)^2;
d2=(x(2)-m)^2+(y(2)-n)^2;
if d1<=d2
xmin=x(1);
ymin=y(1);
dmin=sqrt(d1);
else
xmin=x(2);
ymin=y(2);
dmin=sqrt(d2);
end
ret(1)=xmin;
ret(2)=ymin;
ret(3)=dmin;
end