如何求指定圆与随机多圆的相交弧长度之和

img

1、中间的圆是指定大小,一直圆心坐标和半径大小。
2、其余的小圆是随机生成的,半径及圆心坐标未知。
3、如何求大圆与多小圆的相交弧长度的和。
请各位给想想办法

你好,代码供参考,思想就是先求是否有交点,然后获取半弦长,再获取圆心角,最后得到相交弧长:

clc;clear

theta = linspace(0,2*pi,101);%用来画图的theta
R = 0.3;%大圆的半径
Xc = 0.5;%大圆的圆心x位置
Yc = 0.5;%大圆的圆心y位置
plot(Xc+R*cos(theta), Yc+R*sin(theta),'r');hold on;%画大圆

% 随机10个小圆
rng(1)%固定种子,方便复现
xc = rand(10,1);%小圆的圆心x位置
yc = rand(10,1);%小圆的圆心y位置
r = rand(10,1)*0.1;%小圆的半径
% 画图
for i = 1:1:numel(xc)
    plot(xc(i)+r(i)*cos(theta), yc(i)+r(i)*sin(theta));
    hold on
end
axis equal

% 下面开始计算弧长
C = 0; %初始化弧长为1
for i = 1:1:numel(xc)
    d = sqrt((Xc-xc(i))^2+(Yc-yc(i))^2);%两个圆的距离
    if(d<R+r(i) && d>R-r(i))%假如有交点
        a = max(d, R);%长边
        b = max(d, R);%短边
        p = (a+b+r(i))/3;
        S = sqrt(p*(p-a)*(p-b)*(p-r(i)));
        % S=√p(p-a)(p-b)(p-c)海伦公式求三边围成的面积
        h = 2*S/a; %获得半弦长
        alpha = asin(h/b);%获取半个角度
        c = 2*alpha*R; %获取相交弧长
        C = C+c;%把弧长累加
    end 
end
C %显示总弧长

相交弧长在这个例子里是:

C =

   0.335741762954340

效果图:

img

有帮助还请给个采纳支持答主哦,谢谢啦