csdn-唯一 2021-04-29 15:55 采纳率: 0%
浏览 155
已结题

Matlab将若干个圆按大小依次放在距离坐标原点最近的地方,圆于圆可以相切

能够随机生成若干圆,按要求排列。源码

比如说图片中1,2,3这样。尽可能靠近坐标原点,同时不和其他圆相交。

4就是不符合要求的

  • 写回答

3条回答 默认 最新

  • CSDN专家-黄老师 2021-04-29 16:35
    关注

    能不能求一个点到圆的最短距离?参考一下

    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

    评论

报告相同问题?