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
效果图:
有帮助还请给个采纳支持答主哦,谢谢啦