我有一个几何问题需要解决:
给定圆心在原点C(0, 0),半径为1的圆。圆内给出N个点,这些点代表N个不同圆的圆心。你需要找到最小的小圆半径(所有圆的半径相等),以覆盖大圆的所有边界。
圆的数量是:3≤N≤10000,问题必须以P位小数的精度解决,其中1≤P≤6。
例如:
N = 3且P = 4
坐标为:
(0.193, 0.722)
(-0.158, -0.438)
(-0.068, 0.00)
小圆的半径为:1.0686。
我的想法是使用二分查找来找到半径,并尝试找到小圆和大圆之间的所有交点。每个交点将产生一条弧线。下一步是将弧线的坐标“投影”到X轴和Y轴上,结果是一些区间。如果X轴和Y轴的区间重合在[-1,1]区间内,则意味着所有圆都被覆盖了。
为避免精度问题,我考虑在0和2×10^P之间进行搜索,并将半径取为10^P,从而消除逗号后的数字。但我的问题是如何模拟圆的交点,以及之后如何查看结果区间的重合是否形成[-1,1]区间。
欢迎提出任何建议!
圆的数量是:3≤N≤10000,问题必须以P位小数的精度解决,其中1≤P≤6。
例如:
N = 3且P = 4
坐标为:
(0.193, 0.722)
(-0.158, -0.438)
(-0.068, 0.00)
小圆的半径为:1.0686。
我的想法是使用二分查找来找到半径,并尝试找到小圆和大圆之间的所有交点。每个交点将产生一条弧线。下一步是将弧线的坐标“投影”到X轴和Y轴上,结果是一些区间。如果X轴和Y轴的区间重合在[-1,1]区间内,则意味着所有圆都被覆盖了。
为避免精度问题,我考虑在0和2×10^P之间进行搜索,并将半径取为10^P,从而消除逗号后的数字。但我的问题是如何模拟圆的交点,以及之后如何查看结果区间的重合是否形成[-1,1]区间。
欢迎提出任何建议!