我想解决的问题是:
给定圆上可以居中的一组M点和一组需要被圆覆盖的N个线段,找到线段的最小面积圆覆盖 . 也就是说,找到圆的半径和中心(从M个点中选择),使得覆盖所有N个线段并且最小化圆的总面积 .
请注意,如果没有任何部分是一个圆形,则会覆盖一个线段 .
任何指向论文或代码或近似算法的指针都会很棒 .
Edit: 刚刚意识到原始方法(移到最后)可能不会更好地迭代点而不是线段,在圆边界处向下切割线段:
找到"worst"点,即需要最佳圆形中心选项的最大附加圆形区域的点,其中相应的线段至少部分位于圆圈中 . 构造/扩展相应的圆 .
从集合中移除完全覆盖的线段,并在圆边界处切割部分覆盖的线段 .
迭代,直到不再有线段 .
主要思想是在任何情况下继续做必要的事情 . 如何计算重叠的圆圈?这些区域是合计还是合并?当在以后的迭代中回到第一步时,某种成本启发式可能会改善结果......
最初的建议是:
找到"worst"线段,即任何圆心选项需要最大圆的线段,并构造相应的圆 .
从集合中删除覆盖的线段 .
我刚刚发布了一些代码来实现建议的算法:
https://github.com/usnistgov/esc-antenna-cover
2 回答
Edit: 刚刚意识到原始方法(移到最后)可能不会更好地迭代点而不是线段,在圆边界处向下切割线段:
找到"worst"点,即需要最佳圆形中心选项的最大附加圆形区域的点,其中相应的线段至少部分位于圆圈中 . 构造/扩展相应的圆 .
从集合中移除完全覆盖的线段,并在圆边界处切割部分覆盖的线段 .
迭代,直到不再有线段 .
主要思想是在任何情况下继续做必要的事情 . 如何计算重叠的圆圈?这些区域是合计还是合并?当在以后的迭代中回到第一步时,某种成本启发式可能会改善结果......
最初的建议是:
找到"worst"线段,即任何圆心选项需要最大圆的线段,并构造相应的圆 .
从集合中删除覆盖的线段 .
迭代,直到不再有线段 .
我刚刚发布了一些代码来实现建议的算法:
https://github.com/usnistgov/esc-antenna-cover