问题:与每个节点距离相等的网格。网格的每个小节点都是半径为r的圆(图:灰色圆圈),如果我们制作任何圆(图:蓝色)那么我们如何制作一组具有上部(图:红色圆圈)和下限的圆圈(图:红色圆圈)。基本上我们需要找到上限半径和下限半径。
已知价值是:
如何找到上圆和下圆的半径。在大圆周内的每个蓝色小圆圈都应该位于下限之下,反之亦然。[/ p>
目前我想出了这个不正确的解决方案: unpper_bound_radius = rb +(r +(rb /(3.1415926 * 2r))) lower_bound_radius = rb - (r +(rb /(3.1415926 * 2r)))
由于
答案 0 :(得分:3)
如果您正在寻找一种算法来确定哪些灰点与蓝色圆圈相交,并计算包含所选灰色点的边界的半径,您可以执行以下操作:
rb-r
和rb+r
之间,则蓝色圆圈与此灰色点相交。distance - r
,将外边界调整为distance + r
。示例计算:
结果:内边界为5×4r-r,外边界为5.09902×4r + r。
function boundaries(b) {
var i = b, o = b, x = 0, y = Math.ceil(b / 4) * 4;
while (Math.atan2(y, x) >= Math.PI / 4) {
var d = Math.sqrt(x * x + y * y);
if (d < b - 1) x += 4; // too close, go right
else if (d > b + 1) y -= 4; // too far, go down
else { // intersection
if (i > d - 1) i = d - 1; // adjust inner
if (o < d + 1) o = d + 1; // adjust outer
x += 4; // go right
}
}
return {i: i, o: o};
}
var res = boundaries(20);
document.write("inner: r×" + res.i + "<br>outer: r×" + res.o);