Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何找出给定圆的周长有多少被其他相交圆覆盖?_Algorithm_Matlab_Geometry - Fatal编程技术网

Algorithm 如何找出给定圆的周长有多少被其他相交圆覆盖?

Algorithm 如何找出给定圆的周长有多少被其他相交圆覆盖?,algorithm,matlab,geometry,Algorithm,Matlab,Geometry,我有一个圆心坐标和半径 平面上还有其他已知位置和相同半径的圆 如何使用Matlab找出给定圆的周长中被平面中其他圆覆盖的部分?通常的方法是: 将圆周表示为角[0,2Pi]的间隔,该角表示圆周的一部分所覆盖的角(朝向任意方向,比如x方向) 当前覆盖周长为空间隔[0,0] 计算您的圆和另一个圆所覆盖的周长(如果没有交点,则无覆盖周长,见下文) 将此间隔与当前覆盖周长合并以获得新的当前覆盖周长,您可以获得一组间隔 检查当前覆盖的周长是否为单个间隔[0,2Pi],如果不是,则重复3 如何计算你的圆和另一

我有一个圆心坐标和半径

平面上还有其他已知位置和相同半径的圆


如何使用Matlab找出给定圆的周长中被平面中其他圆覆盖的部分?

通常的方法是:

  • 将圆周表示为角[0,2Pi]的间隔,该角表示圆周的一部分所覆盖的角(朝向任意方向,比如x方向)
  • 当前覆盖周长为空间隔[0,0]
  • 计算您的圆和另一个圆所覆盖的周长(如果没有交点,则无覆盖周长,见下文)
  • 将此间隔与当前覆盖周长合并以获得新的当前覆盖周长,您可以获得一组间隔
  • 检查当前覆盖的周长是否为单个间隔[0,2Pi],如果不是,则重复3
  • 如何计算你的圆和另一个圆所覆盖的圆周部分


  • 通过将两个圆的圆方程(r²=(x-中心×x)²+(y-中心×y)相等并求解二项式方程,计算交点。如果没有两个交点(即Trilarion解释的),则在计算的核心,您需要与两个圆相交。
    你可以在网上找到这方面的代码,也可以自己编写。其中一个来源是与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,只有算法的大纲。