Algorithm 如何找出给定圆的周长有多少被其他相交圆覆盖?
我有一个圆心坐标和半径 平面上还有其他已知位置和相同半径的圆Algorithm 如何找出给定圆的周长有多少被其他相交圆覆盖?,algorithm,matlab,geometry,Algorithm,Matlab,Geometry,我有一个圆心坐标和半径 平面上还有其他已知位置和相同半径的圆 如何使用Matlab找出给定圆的周长中被平面中其他圆覆盖的部分?通常的方法是: 将圆周表示为角[0,2Pi]的间隔,该角表示圆周的一部分所覆盖的角(朝向任意方向,比如x方向) 当前覆盖周长为空间隔[0,0] 计算您的圆和另一个圆所覆盖的周长(如果没有交点,则无覆盖周长,见下文) 将此间隔与当前覆盖周长合并以获得新的当前覆盖周长,您可以获得一组间隔 检查当前覆盖的周长是否为单个间隔[0,2Pi],如果不是,则重复3 如何计算你的圆和另一
如何使用Matlab找出给定圆的周长中被平面中其他圆覆盖的部分?通常的方法是:
你可以在网上找到这方面的代码,也可以自己编写。其中一个来源是与2D机器人手臂运动相关的代码(
arm.c
),其中包括使两个圆相交的函数。有一些退化的情况必须小心处理:两个圆在一个点上相交,或者相等的圆在一个整圆上相交。要正确地看待问题,可以使用matlab pde向我们显示图形
pdecirc(1,2,3)
pdecirc(-1,-1,2)
如果要使用方程式在matlab上绘制它,它是:
n=100%分辨率
angle=0:2*pi/n:2*pi;%绘制点的角度向量
R=3;%radius
x=R*cos(角度)+2;y=R*sin(角度)+1;%圆坐标
绘制(x,y);%绘制圆
轴相等;
网格打开;
你可以画任意多的图,如果你想得到很高的分辨率,你可能必须把n设为高值。。
使用matlab Circ查找圆的交点,有关详细信息,请参见
[xout,yout]=circcirc(1,2,3,-1,-1,2);%返回x-相交和y-相交
您可以将x和y交点分组,并根据半径和交点计算周长。如果您不知道如何计算,请检查此项
假设你有两个圆心在(1,2)和(-1,-1)的圆
i=pdist([xout(1),yout(1);xout(2),yout(2)],'euclidean')相交之间的距离百分比
p=[xout(1),yout(1);1,2]%一个十字路口和你的中心的坐标
E=pdist(p,'euclidean')
y=asin(i/(2*E))*2%的弧角
cir=pi*2*R1*(y/(2*pi))
%弧与总周长的比率
除非我高中的数学不及格,否则你的答案应该在两个圆圈之间
PS:使用Circ的好处是,如果圆不相交(即重叠或不相互接触,它会返回坐标的NaN,然后可以处理)这有点让人困惑。你能详细说明一下吗,也许是一张图片?如果两个圆的圆心比一个圆的半径近2*那么另一个圆心会被遮挡。你能分辨出哪一个是“在顶部”吗另一个呢?@AnderBiguri我读了两遍,但后来我真的明白了。这个问题很好。更多的是关于算法而不是编程。为了让它更清晰,我把它提高到了值得投票的标准。@Triarion ye,是的,这个问题很好!只是提出了一些让它更清晰的方法。人们倾向于避开那些需要一次投票的问题很抱歉,我不能给出太多实际的Matlab,只有算法的大纲。