Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Geometry 用等半径圆覆盖任意区域_Geometry - Fatal编程技术网

Geometry 用等半径圆覆盖任意区域

Geometry 用等半径圆覆盖任意区域,geometry,Geometry,如果一个算法覆盖一个半径相等的圆的任意区域,它将如何工作 圆的半径以及面积的大小和形状是任意给定的。该区域应尽可能少地覆盖圆圈。圆圈可能重叠 是否有一种算法可以处理这个问题?在不了解更多约束条件的情况下,我建议对平面进行规则覆盖,使用与六边形瓷砖的规则六边形对应的圆盘。然后保持所有磁盘与形状相交。希望我正确理解了您的问题 可以证明,使用球体时,球体的六边形紧密堆积(HCP)覆盖了最大体积。因此,我假设使用圆进行HCP也会覆盖使用圆的最大面积。用三角形对区域进行细分,并在三角形的每个顶点放置一个圆

如果一个算法覆盖一个半径相等的圆的任意区域,它将如何工作

圆的半径以及面积的大小和形状是任意给定的。该区域应尽可能少地覆盖圆圈。圆圈可能重叠


是否有一种算法可以处理这个问题?

在不了解更多约束条件的情况下,我建议对平面进行规则覆盖,使用与六边形瓷砖的规则六边形对应的圆盘。然后保持所有磁盘与形状相交。

希望我正确理解了您的问题

可以证明,使用球体时,球体的六边形紧密堆积(HCP)覆盖了最大体积。因此,我假设使用圆进行HCP也会覆盖使用圆的最大面积。用三角形对区域进行细分,并在三角形的每个顶点放置一个圆心,半径为三角形边长度的一半。请参阅,以获取我正在谈论的算法的图像

注意:这类似于

编辑:我以前的方法覆盖了尽可能多的区域,没有重叠。如果允许重叠,那么(我相信)以下方法将覆盖整个区域,重叠最小

您可能知道,只有3个二维空间的正多边形细分-使用正方形、三角形或六边形。该策略是使用其中一个多边形进行细分,然后为每个多边形外接一个圆。使用这种方法,六边形将浪费最小面积

因此,根据给定圆的半径,计算所需六边形的大小,使用六边形细分区域,然后在每个六边形上外接一个圆

NB:提出了类似的方法


--Flaviu Cipcigan

我知道这个问题可能有点过时,但最近我遇到了一个类似的问题,即使用六边形网格用相等的圆覆盖地理区域,我就是这样解决的:

  • 我输入的数据是以米为单位的圆半径和该区域边界的坐标
  • 首先,我找到了覆盖给定区域的边界矩形
  • 然后从左下角开始,我移动该点,移动距离等于用于构建六边形的三角形高度的两倍(它的边与我的圆的半径相同),使用Vincenty公式的方位角为0度
  • 对于我找到的每个点,我检查它是否与输入区域相交,是否保存它,或者跳过它
  • 当我到达边缘时,我再做一次检查,以确保我将获得are内的所有点
  • 我以60度的方位移动点,检查它,然后以120度,再次检查
  • 返回到第三步,但现在我通过180度的方向角移动点
  • 再次检查边缘,如第6步所示,但先检查120度,然后检查60度
  • 继续,直到到达矩形的上边缘
  • 和给定的图像一样,当然可以通过减小圆的半径来提高精度

    我知道这不是最好的选择,但对我来说效果很好


    我希望这是可以理解的,并且对任何人都有帮助。

    圆圈不会分割,所以如果没有重叠,就无法完美地完成这项工作。你能澄清你的问题吗?编辑了我的答案,加入了一个覆盖整个领域的方法。:-)“被尽可能少的圆圈覆盖”有多重要?如果使用绝对最小数量的圆并不重要,那么像Eric Bainville这样的技术可以在许多情况下产生良好的效果。圆的大小必须相同吗?圆圈可以重叠形状的边缘吗?圆圈的大小必须相同。它们可能会重叠形状的边缘。这种技术不起作用,因为它没有覆盖整个区域。嗨,我想解决完全相同的问题,尽管我没有完全遵循你的sudo代码。你能为我提供你的实施方案吗?谢谢